我有一個函式'zero',我不能改變它或添加行。
def zero(a, b)。
try:
num = a / b
except:
print("不能除以0")
def main()。
zero(10,5)
zero(10,0)
在主函式中,我想呼叫零函式并知道該函式是否呼叫了例外。
uj5u.com熱心網友回復:
鑒于你不能以任何方式改變zero()的限制(這是正確的方法),那么你可以重定向stdout并決議輸出。
import sys
import io
def zero(a, b) 。
try:
num = a / b
except:
print("不能除以0")
if __name__ == '__main__'/span>:
old_stdout = sys.stdout
for x, y in [(5, 0)。(10, 2), (10, 0) ] 。
new_stdout = io.StringIO()
sys.stdout = new_stdout
零(x, y)
result = new_stdout.getvalue().strip()
if result:
print(f'司 {x}/{y} 提出一個錯誤。 {result}', file=old_stdout)
sys.stdout = old_stdout
輸出
除法 5/0 引發一個錯誤:不能除以零
除法 10/0 引發一個錯誤:不能除以零
uj5u.com熱心網友回復:
你可以回傳除法的結果,或者使用下面的方法回傳例外:
def zero(a, b)。
try:
num = a / b
except:
num="不能除以零"。
return num
這將允許你在主函式中比較結果并確定是否呼叫了例外。
uj5u.com熱心網友回復:
這是一個奇怪的要求,因為該函式總是回傳None,因為num是一個區域變數,而該函式并沒有回傳它。所以你甚至不能通過全域變數num而發現有一個例外,而不在函式中加入global陳述句。
這種方法會奏效,盡管我對這個問題的看法很差:
def zero(a, b)。
try:
num = a / b
except:
print("不能除以0")
def print(error)。
raise ValueError(error)
>>> zero(10,5)
>>> zero(10,0)
回溯(最近一次呼叫)。
檔案 "<pyshell#1>", 行 3, in zero
num = a / b
ZeroDivisionError:除以零
在處理上述例外的程序中,發生了另一個例外。
回溯(最近一次呼叫)。
檔案"<pyshell#13>",行1,in<module>
零(10,0)
檔案 "<pyshell#1>", 行 5, in zero
print("不能除以零")
檔案"<pyshell#11>",第2,in print。
raise ValueError(error)
ValueError: 不能除以零
函式zero()的編碼很差,強迫你使用它而不改變它,我看不出有什么教育意義,除了可能讓人明白裸露的except條款是個壞主意。
這個答案在精神上與 @buran 的答案相似。它們都涉及到改變 print() 的行為,以便在函式之外傳遞你想要的資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/326633.html
標籤:
