如何找出Python警告的来源

Bon*_*uar 30 python debugging warnings pandas

使用Pandas,我仍然是Python的新手,我在调试Python脚本时遇到了一些问题.

我收到以下警告信息:

[...]\pandas\core\index.py:756: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
return self._engine.get_loc(key)
Run Code Online (Sandbox Code Playgroud)

而且无法找到它的来源.

经过一些研究,我试图在Pandas lib文件(index.py)中做到这一点:

try:
    return self._engine.get_loc(key)
except UnicodeWarning:
    warnings.warn('Oh Non', stacklevel=2)
Run Code Online (Sandbox Code Playgroud)

但这并没有改变警告信息.

And*_*den 28

您可以过滤警告以使您能够调试(例如使用pdb):

import warnings
warnings.filterwarnings('error')
Run Code Online (Sandbox Code Playgroud)

*警告过滤器可以更精细地管理(这可能更合适),例如:

warnings.filterwarnings('error', category=UnicodeWarning)
warnings.filterwarnings('error', message='*equal comparison failed*')
Run Code Online (Sandbox Code Playgroud)

将按顺序查找多个过滤器.("如果两者都匹配特定警告,则靠近列表前面的条目会覆盖列表后面的条目.")


Max*_* R. 9

您还可以使用命令行来控制警告:

python -W error::UnicodeWarning your_code.py
Run Code Online (Sandbox Code Playgroud)

从手册页:

-W argument
[...] 错误引发异常而不是打印警告消息.

这与在代码中添加以下内容具有相同的效果:

import warnings
warnings.filterwarnings('error', category=UnicodeWarning)
Run Code Online (Sandbox Code Playgroud)

正如Andy的回答中已经说过的那样.