2016-06-07 25 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找到错误的机会