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

设置FormattedTB调用pdb时触发NoneType错误,求修复方案

问题修复:IPython ultratb.FormattedTB 初始化报错 TypeError: 'NoneType' object is not callable

问题重现

执行以下代码设置异常捕获时:

from IPython.core import ultratb
sys.excepthook = ultratb.FormattedTB(mode='Verbose', color_scheme='Linux', call_pdb=1)

触发如下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/dinari/miniconda3/envs/testenv/lib/python3.8/site-packages/IPython/core/ultratb.py", line 994, in __init__
    VerboseTB.__init__(self, color_scheme=color_scheme, call_pdb=call_pdb,
  File "/Users/dinari/miniconda3/envs/testenv/lib/python3.8/site-packages/IPython/core/ultratb.py", line 638, in __init__
    TBTools.__init__(
  File "/Users/dinari/miniconda3/envs/testenv/lib/python3.8/site-packages/IPython/core/ultratb.py", line 242, in __init__
    self.pdb = debugger_cls()
TypeError: 'NoneType' object is not callable

环境信息:Python 3.8.2、IPython 8.4.0,pdb单独使用正常。

修复方案

方案1:显式指定debugger_cls参数

在初始化FormattedTB时,手动传入pdb.Pdb作为调试器类,代码修改如下:

import sys
import pdb
from IPython.core import ultratb

sys.excepthook = ultratb.FormattedTB(
    mode='Verbose',
    color_scheme='Linux',
    call_pdb=1,
    debugger_cls=pdb.Pdb
)

原因:IPython 8.4.0中,TBTools初始化时若启用call_pdb,默认的debugger_cls未正确加载为可调用对象,显式指定pdb.Pdb可解决该NoneType调用错误。

方案2:降级IPython至兼容版本

若不想修改代码,可将IPython降级到与Python 3.8兼容的7.x系列稳定版本,执行以下命令:

pip install ipython==7.34.0

7.x版本的IPython在Python 3.8环境下,ultratb.FormattedTB的call_pdb参数可正常工作,无需额外配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 22:48:52