我们有内部尝试例外,例如
try:
try: (problem here)
except: (goes here)
except: (will it go here) ??
这是 try excepts 的当前流程吗?如果外部 try 块内部捕获到异常,它是错误还是非错误?
不,它不会出现在第二个 except 中,除非第一个也引发异常。
当您进入该except
子句时,您几乎是在说“异常被捕获,我会处理它”,除非您重新引发异常。例如,这个结构通常非常有用:
try:
some_code()
try:
some_more_code()
except Exception as exc:
fix_some_stuff()
raise exc
except Exception as exc:
fix_more_stuff()
这允许您对同一异常进行多层“修复”。
它不会到达外部except
,除非您在该异常中引发另一个异常,如下所示:
try:
try:
[][1]
except IndexError:
raise AttributeError
except AttributeError:
print("Success! Ish")
除非内部except
块引发了适合外部块的异常,否则它不会被视为错误。
错误不会命中外部Except
。你可以像这样测试它:
x = 'my test'
try:
try: x = int(x)
except ValueError: print 'hit error in inner block'
except: print 'hit error in outer block'
这只会打印'hit error in inner block'
.
Try
但是,在内部/块之后说一些其他代码Except
,这会引发错误:
x, y = 'my test', 0
try:
try: x = int(x)
except ValueError: print 'x is not int'
z = 10./y
except ZeroDivisionError: print 'cannot divide by zero'
这将同时打印'x is not int'
AND 'cannot divide by zero'
。