使用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)
无法找到它的位置。
经过一些研究,我试图在Pandas lib文件(index.py)中这样做:
try:
return self._engine.get_loc(key)
except UnicodeWarning:
warnings.warn('Oh Non', stacklevel=2)
但这并没有改变警告信息。
答案 0 :(得分:23)
您可以filter the warnings加注,这将使您能够调试(例如使用pdb):
import warnings
warnings.filterwarnings('error')
* warnings filter可以更精细地管理(这可能更合适),例如:
warnings.filterwarnings('error', category=UnicodeWarning)
warnings.filterwarnings('error', message='*equal comparison failed*')
将按顺序查找多个过滤器。 (“如果两者都匹配特定警告,则靠近列表前面的条目会覆盖列表后面的条目。”)
答案 1 :(得分:9)
您还可以使用命令行来控制警告:
python -W error::UnicodeWarning your_code.py
从手册页:
-W参数
[...] 错误引发异常,而不是打印警告消息。
这与在代码中添加以下内容具有相同的效果:
import warnings
warnings.filterwarnings('error', category=UnicodeWarning)
正如Andy的回答中已经说过的那样。
答案 2 :(得分:0)
如果在python中启用日志记录,那么当收到异常时,您可以使用方法logging.exception
记录何时捕获到异常 - 此方法将打印出格式正确的堆栈跟踪,发生异常的代码。有关详细信息,请参阅python document on logging。
import logging
log = logging.getLogger('my.module.logger')
try:
return self._engine.get_loc(key)
except UnicodeWarning:
log.exception('A log message of your choosing')
或者,您可以通过调用sys.exc_info()
来获取包含代码中详细信息的元组(这需要您导入sys
模块)。
答案 3 :(得分:0)
调查警告的最有用的方法是将其转换为错误(Exception
),以便查看其完整的堆栈跟踪:
import warnings
warnings.simplefilter("error")
请参见warnings。