Python中不使用try-except如何在触发异常时自动运行指定函数
实现方案
你可以通过重写Python的全局未捕获异常钩子sys.excepthook实现需求,不需要用到try/except关键字,该钩子会在程序出现未被捕获的顶层异常时自动被解释器调用。
示例代码
import sys def onError(): print("There was an error") # 自定义异常处理钩子,接收固定三个参数:异常类型、异常实例、回溯对象 def custom_exception_handler(exc_type, exc_val, exc_tb): # 先执行你定义的错误处理函数 onError() # 可选:保留系统默认的异常栈打印逻辑,不需要可以删除下一行 sys.__excepthook__(exc_type, exc_val, exc_tb) # 替换系统默认的异常钩子 sys.excepthook = custom_exception_handler # 测试触发异常 raise NameError
说明
- 该方法仅对未被捕获的异常生效,如果你代码其他位置已经通过
try/except捕获了对应异常,钩子不会被触发。 - 如果需要处理多线程场景下的未捕获异常,可以额外重写
threading.excepthook,用法和sys.excepthook一致。
内容的提问来源于stack exchange,提问作者BaguetteYeeter
相关产品推荐
相关产品推荐

