2016-06-07 43 views
0
def f(n): 
    if n>0: 
     print(1/n) 
    else: 
     raise Exception 
try: 
    f(0) 
except Exception: 
    print("Error!") 

在f(n)內引發異常時,解釋器是否返回到try/except塊(這意味着try/except有自己的塊),還是立即引發和處理該錯誤(這意味着相反)?Try/Except塊是否創建自己的堆棧?

回答

1

Actualy它提出了從F(n)的函數,直到它找到一個的try/catch處理機程序棧的結束。在最後一種情況下,程序將停止並引發用戶的錯誤(通過控制檯)。

這將引發異常到用戶:

def f(n): 
    raise Exception 

f(5) 

但是,如果你添加一個try/catch之間,異常會被處理,除了塊:

def f(n): 
    raise Exception 

try: 
    f(5) 
except: 
    print('Error handled') 
+0

好的解釋,不好的使用try/except(使用空白的except語句是不好的做法) –

+0

是的,對於這個例子,我用一個簡單的打印顯示來顯示如果你能夠追加什麼處理一個異常,但作爲@ Two-BitAlchemist說,如果你想處理這樣的錯誤**你必須**執行另一個代碼,但不要離開除了bloc blanck(沒有真正的句柄) – hugodecasta

2

在你的情況,我認爲這是更pythonic:

def f(n): 
    try: 
     print(1/n) 
    except ZeroDivisionError: 
     print ("can't divide by zero") 

你永遠不想提出一個例外,因爲你l找到錯誤的機會