在python中,默认的除外(例如,不指定一种错误的except语句)必须是最后一个except语句 . 例如,如果您运行:
try:
print(varDoesntExist)
except:
print("an error happened")
except TypeError:
print("type error happened")
然后你会得到这样的错误:
SyntaxError: default 'except:' must be last
据我所知,这是因为除了之后的任何事情都不会运行,因为无论“try”块中可能出现的错误类型如何,都将调用默认值 .
(注意:这只是我对python执行此操作的理解 . 官方文档确实说最后一个异常可以是默认的,但是没有指定默认的原因,除了必须是最后一个.https://docs.python.org/3.7/tutorial/errors.html)
但是,如果使用指定为类BaseException的异常运行它,如下所示:
try:
print(varDoesntExist)
except BaseException as e:
print(e)
except:
print("an error happened")
尽管在这里会发生同样的问题,但它完全没问题:无论在try块中抛出什么样的错误,“除了Exception as a”行都会捕获它们 . 为什么是这样?