在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”行都会捕获它们 . 为什么是这样?