簡體   English   中英

嘗試並在Python中的RuntimeError上嘗試捕獲錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM