【问题标题】:Tracing Python warnings/errors to a line number in numpy and scipy将 Python 警告/错误跟踪到 numpy 和 scipy 中的行号
【发布时间】:2011-05-10 14:26:15
【问题描述】:
我收到错误:
Warning: invalid value encountered in log
来自 Python,我相信错误是由 numpy 引发的(使用版本 1.5.0)。但是,由于我在几个地方调用了“日志”函数,我不确定错误来自哪里。有没有办法让 numpy 打印产生此错误的行号?
我假设警告是由于取一个小到可以四舍五入为 0 或更小(负数)的数字的对数引起的。那正确吗?这些警告的通常来源是什么?
【问题讨论】:
标签:
python
numpy
scipy
numeric
scientific-computing
【解决方案1】:
将np.seterr(invalid='raise') 放入您的代码中(在错误的log 调用之前)
将导致 numpy 引发异常而不是发出警告。
这会给你一个回溯错误消息,并告诉你发生错误时 Python 正在执行的行。
【解决方案2】:
如果您可以访问 numpy 源,您应该能够找到打印该警告的行(使用 grep 等)并编辑相应的文件以在无效时强制错误(例如使用断言)值被传递。这将为您提供一个堆栈跟踪,指向代码中调用 log 值不正确的位置。
我简要查看了我的 numpy 源代码,但找不到与您描述的警告相匹配的任何内容(不过,我的 numpy 版本比您的旧)。
>>> import numpy
>>> numpy.log(0)
-inf
>>> numpy.__version__
'1.3.0'
您是否可能正在调用其他一些不在 numpy 中的日志函数?例如,当输入无效时,这里实际上会引发异常。
>>> import math
>>> math.log(0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: math domain error