我们有内心的尝试,例如
try:
try: (problem here)
except: (goes here)
except: (will it go here) ??
这是正确的尝试流程吗?如果外部try块内部被捕获异常,则是错误还是非错误?
答案 0 :(得分:6)
不,除非第一个引发异常,否则它不会进入第二个。
当你进入except
子句时,你几乎都说“异常被捕获,我将处理它”,除非你重新提出异常。例如,这个结构通常非常有用:
try:
some_code()
try:
some_more_code()
except Exception as exc:
fix_some_stuff()
raise exc
except Exception as exc:
fix_more_stuff()
这允许您为同一个异常提供多个“修复”层。
答案 1 :(得分:4)
它不会到达外部except
,除非你在那个内部引发另一个例外,如下所示:
try:
try:
[][1]
except IndexError:
raise AttributeError
except AttributeError:
print("Success! Ish")
除非内部except
块引发外部块的异常,否则不会将其视为错误。
答案 2 :(得分:1)
错误不会触及外部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'
和'cannot divide by zero'
。