12

我收到错误消息:

Warning: invalid value encountered in log

从 Python 中,我相信错误是由 numpy 引发的(使用版本 1.5.0)。但是,由于我在几个地方调用了“日志”函数,我不确定错误来自哪里。有没有办法让 numpy 打印产生此错误的行号?

我假设警告是由于取一个小到可以四舍五入为 0 或更小(负)的数字的对数引起的。是对的吗?这些警告的通常来源是什么?

4

2 回答 2

22

放入np.seterr(invalid='raise')您的代码(在错误log调用之前)将导致 numpy 引发异常而不是发出警告。这将为您提供回溯错误消息,并告诉您发生错误时 Python 正在执行的行。

于 2010-11-16T03:20:24.383 回答
0

如果您可以访问 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
于 2010-11-16T03:11:44.307 回答