设置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
相关产品推荐
相关产品推荐

