[英]Try and Except on RuntimeError in Python not catching the Error
我有一個遞歸函數,當我使用超出限制的數字時,會出現此錯誤“ RuntimeError:最大遞歸深度超出cmp”。 我希望使except塊返回-1(這是要求),並且控件未轉移到except塊。 請讓我知道我的程序出了什么問題。 提前致謝
def g(n):
try:
def f(x):
if x == 1:
return 1
elif x == 0.5:
return math.sqrt(PI)
else:
final_value = (x-1)*f(x-1)
return final_value
except RuntimeError:
return -1
n = f(n/2.0)
return n
try
的唯一事情(忽略IndentationError
,希望它在您的實際代碼中不存在)是def
語句。 定義該函數不會引發RuntimeError
,因此沒有任何收獲。
調用該函數會引發RuntimeError
,因此您需要try
調用該函數。 兩個明顯的地方是遞歸調用:
try:
final_value = (x-1)*f(x-1)
except RuntimeError:
return -1
return final_value
…或外部調用:
try:
n = f(n/2.0)
except RuntimeError:
return -1
return n
我不知道你要哪一個。 在外部調用中處理它意味着將丟棄所有1000個遞歸幀,而您只需從頂層return -1
。 在內部調用中處理它意味着您從最內部的幀返回-1
,但是從那里到頂部的每個幀都將-1
與其本地x-1
相乘,然后再傳遞回去。 希望您知道您想要哪一個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.