You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 3.12中如何用sys.last_exc调用sys.excepthook?

问题

sys.excepthook的签名为:

sys.excepthook(type, value, traceback)

此前常规调用方式是:

sys.excepthook(sys.exc_type, sys.exc_value, sys.exc_traceback)

但Python 3.12起,sys.exc_type、sys.exc_value、sys.exc_traceback已被弃用,转而使用sys.last_exc。已知可以用type(last_exc)作为第一个参数,last_exc作为第二个参数,但不清楚第三个参数traceback该如何获取。此问题源于更新Hy的异常过滤逻辑。

解决方案

直接通过异常实例的__traceback__属性获取回溯信息即可,这和之前sys.exc_traceback指向的是同一个对象。完整的调用代码如下:

import sys

if sys.last_exc is not None:
    sys.excepthook(type(sys.last_exc), sys.last_exc, sys.last_exc.__traceback__)

需要注意两点:

  • sys.last_exc可能为None(比如当前没有未处理的异常时),调用前要先做非空判断,避免触发AttributeError。
  • 异常实例的__traceback__是Python 3引入的标准属性,在try/except块中捕获异常时,也可以通过exc.__traceback__获取对应的回溯栈。

内容的提问来源于stack exchange,提问作者Kodiologist

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 01:18:12