我的問題很簡單。這是概念:
from random import randrange, uniform
def match (x, y):
if x == y:
print("True!")
else:
print("False")
return
def main():
while True:
match(randrange(0, 10), randrange(0, 10))
while True:
match(randrange(0, 10), randrange(0, 10))
while True:
match(randrange(0, 10), randrange(0, 10))
main()
如您所見,有兩個功能。main()which 回圈遍歷隨機整數,直到它們匹配,以及match()將實際整數傳遞到其中以進行計算,如果遇到錯誤結果,則兩個回圈都應中斷。這段代碼有兩個問題:
- 回圈永遠不會中斷,因為回傳僅適用于運行代碼的函式。我的目標是在回傳錯誤結果時停止主函式。
- 可以在每一行添加 if 陳述句來檢查回傳的結果是否為 False。然而,這將是非常低效的并且根本不理想。一定會有更好的辦法。
我應該注意,這是我根據實際代碼遇到的問題建模的代碼,該代碼很長,并且在沒有背景關系的情況下無法在此處復制粘貼。盡管如此,同樣的原則仍然適用:就像這里的代碼一樣,當它呼叫的子函式計算出錯誤的結果時,我必須阻止主函式進一步計算。
我怎樣才能做到這一點?我的想法是以某種方式從 subfunction 中停止 main 功能match(),但這可能嗎?如果沒有,我有什么選擇?
uj5u.com熱心網友回復:
from random import randrange, uniform
def match (x, y):
if x == y:
print("True!")
else:
print("False")
raise Exception()
def main():
try:
while True:
match(randrange(0, 10), randrange(0, 10))
while True:
match(randrange(0, 10), randrange(0, 10))
while True:
match(randrange(0, 10), randrange(0, 10))
except:
print("exit")
main()
這可能不是您想要的答案,但我想它可能會有所幫助。
通過使用 try 和 except 創建一個包含所有while回圈的范圍,您可以通過引發例外退出函式。
如果你想完全結束函式(不在try/except函式中做),你可以簡單地這樣做:
try:
main()
except:
#something else
這也允許您在不修改函式本身的情況下執行此操作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/409626.html
標籤:
下一篇:二維矩陣崩潰的動態解除分配
