debugging 如何在python中打破警告?

hjqgdpho  于 2023-08-06  发布在  Python
关注(0)|答案(1)|浏览(74)

在python中,我很难调试警告。我想让调试器在这些警告发生时中断,这样我就可以查看变量了。
但是我不想把它们变成错误(使用python -W error myprogram.py),因为我希望能够恢复程序执行/忽略其中的一些错误。

x759pob2

x759pob21#

在此anwser上构建,您可以通过以下方式实现:
1.将用于打印警告的默认函数更改为自定义函数
1.在其中的任意位置设置一个普通断点(使用您最喜欢的调试器/ IDE)
1.使用调试器在堆栈中向上移动一级,退出警告打印功能,并转到实际生成警告的位置
这是一个示例,自定义警告打印功能:

import traceback
import warnings
import sys
def warn_with_traceback(message, category, filename, lineno, file=None, line=None):
    # Set a BREAKPOINT on any of these lines below !
    log = file if hasattr(file,'write') else sys.stderr
    traceback.print_stack(file=log)
    log.write(warnings.formatwarning(message, category, filename, lineno, line))

warnings.showwarning = warn_with_traceback

字符串
此特定函数还显示错误的追溯。这对调试总是很有帮助的。

相关问题