尝试/except 块是否创建自己的堆栈?


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 有自己的块),还是立即引发并处理该错误(这意味着相反)?

在你的情况下,我认为这更pythonic:

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

你永远不想提出一个一揽子例外,因为你失去了了解出了什么问题的机会

实际上,

从f(n)函数开始,直到找到try/catch处理程序程序堆栈的末尾。在最后一种情况下,程序将停止并向用户引发错误(通过控制台)。

这会将异常引发到用户:

def f(n):
    raise Exception
f(5)

但是,如果您在两者之间添加 try/catch,则异常将由 except 块处理:

def f(n):
    raise Exception
try:
    f(5)
except:
    print('Error handled')

最新更新