首页 > 解决方案 > 我可以修改抛出异常时 pdb 打印的内容吗?

问题描述

我跑:

python -m pdb script_that_throws.py

当脚本抛出时,比如由于断言失败,pdb打印整个堆栈跟踪 + 一些毫无意义的样板文本:

Traceback (most recent call last):
  File "/usr/lib/python3.6/pdb.py", line 1667, in main
    pdb._runscript(mainpyfile)
  File "/usr/lib/python3.6/pdb.py", line 1548, in _runscript
    self.run(statement)
  File "/usr/lib/python3.6/bdb.py", line 434, in run
    exec(cmd, globals, locals)
  File "<string>", line 1, in <module>
  [... many lines of stack trace omitted for brevity ...]
  File "/path/to/script_that_throws.py", line 26, in _ul
    assert v.keys() == self._expected_keys
AssertionError
Uncaught exception. Entering post mortem debugging
Running 'cont' or 'step' will restart the program
> /path/to/script_that_throws.py(26)_ul()
-> assert v.keys() == self._expected_keys
(Pdb)

我希望 Python 只显示:

AssertionError
> /path/to/script_that_throws.py(26)_ul()
-> assert v.keys() == self._expected_keys
(Pdb)

有没有办法做到这一点?

标签: pythonpython-3.xpdb

解决方案


答案有好有坏。

好的一个。当然,您可以隐藏这些消息。

现在糟糕的答案开始发挥作用。

您必须更改cpython源代码,然后重新编译它。

这并不像一开始听起来那么难,尤其是作为pdbPython 模块,不需要任何C知识。

这是源代码的重要部分:

https://github.com/python/cpython/blob/master/Lib/pdb.py#L1718-L1725

那里有关于如何编译 Python 的优秀文档: https ://docs.python.org/3/using/unix.html#building-python

此外,Anthony Shaw 刚刚出版了一本书,很好地介绍了如何使用Python 语言cpythonC实现。

以防万一您期望得到不同类型的答案,不,PDB 没有配置选项来抑制此类消息。


推荐阅读