python - 我可以修改抛出异常时 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)
有没有办法做到这一点?
解决方案
答案有好有坏。
好的一个。当然,您可以隐藏这些消息。
现在糟糕的答案开始发挥作用。
您必须更改cpython源代码,然后重新编译它。
这并不像一开始听起来那么难,尤其是作为pdb
Python 模块,不需要任何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 语言cpython
的C
实现。
以防万一您期望得到不同类型的答案,不,PDB 没有配置选项来抑制此类消息。
推荐阅读
- java - 如何解决 String 类型的空点引用对象上的 java.lang.NullPointerException
- java - 通过 HashMap 进行 Java 迭代
- collections - 如何使用 shopify api 从集合中删除产品
- javascript - 立即加载另一个站点并使用 CSS 正确定位它?
- android - 如何使用 RxJava2 基于条件执行并行进程
- ios - CIFilter应用于图像不起作用 - 迅速
- mysql - 如何在查询输出中添加一个字段(针对每个返回的记录),其中包含我的查询返回的总数或记录?
- java - 何时使用请求超时和网关超时
- ios - 在单元格上单击显示特定登录 ID 的图像
- javascript - 获取保存在 SharePoint 列表中的图像的 url