我正在使用Python编写一个简单的自动化脚本,它可能在各种位置抛出异常。在每个异常中,我想记录一个特定的消息并退出程序。为了实现这个目的,在捕获并处理异常后,我会引发SystemExit,并执行特定的日志操作等。
在主函数的顶层调用中,我做如下操作:
if __name__ == "__main__":
try:
main()
except SystemExit: # handled exception
sys.exit(1)
except: # any unhandled exception
logging.error('Unexpected error: ', exc_info=True)
sys.exit(2)
然而,使用裸的except是不被推荐的。我是否可以使用“异常树”,在其中使用裸的except来指定“除我处理过的异常之外的所有异常”,这是一种非标准的方法吗?有更好的方法来实现这个吗?即使这些未经处理的异常没有被处理,我仍然希望记录它们。
编辑:SystemExit被触发以通知已处理异常——无论我的情况下异常是什么,我都希望停止运行脚本,因为任何失败都应该导致绝对失败。
我询问的主要原因是PEP8似乎将使用裸的except视为错误,尽管我可以使用except BaseException,但这只是语法上的区别。哪种方式更加标准,还是有其他标准方法可以实现这个目的?