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块是否创建自己的堆栈?
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块是否创建自己的堆栈?
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')
在你的情况,我认为这是更pythonic:
def f(n):
try:
print(1/n)
except ZeroDivisionError:
print ("can't divide by zero")
你永远不想提出一个例外,因为你l找到错误的机会
好的解释,不好的使用try/except(使用空白的except语句是不好的做法) –
是的,对于这个例子,我用一个简单的打印显示来显示如果你能够追加什么处理一个异常,但作为@ Two-BitAlchemist说,如果你想处理这样的错误**你必须**执行另一个代码,但不要离开除了bloc blanck(没有真正的句柄) – hugodecasta