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')