Python/numpy定位运行时警告

use*_*528 6 python numpy

我有一个numpy脚本坐在一个应用服务器上,它被调用数千次,一次在蓝色的月亮我得到一个运行时警告:

/usr/local/lib/python2.7/dist-packages/scipy/stats/stats.py:2417: RuntimeWarning: invalid value encountered in double_scalars
r = (r_num / r_den)
Run Code Online (Sandbox Code Playgroud)
  1. 不知道发生了什么.
  2. 为什么会这样.
  3. 它对代码的后果如果有的话.一切都通过了眼睛测试和单元测试.

但是我再也不确定我是否正在寻找合适的地方,因为这种转变的可能性不到1%

如何让python打印出警告的位置?

unu*_*tbu 10

如果你放

np.seterr(all='raise')
Run Code Online (Sandbox Code Playgroud)

在脚本开头附近,将引发异常而不是警告.这将使用一个很好的回溯来暂停你的脚本,它将为你提供有关错误发生位置的信息.

然后,您可以try...except在代码中添加引发异常的行,并使用该except子句记录相关变量的值.


此外,您发布的RuntimeWarning表示警告来自第2417 stats.py行.这似乎在pearsonr功能中.谷歌搜索"在double_scalars遇到无效值"得到这太问题提示

from scipy.stats.stats import pearsonr

X = [4, 4, 4, 4, 4, 4]
Y = [4, 5, 5, 4, 4, 4]

pearsonr(X, Y)
Run Code Online (Sandbox Code Playgroud)

提高RuntimeWarning.这表明您偶尔pearsonr使用导致除以零的输入调用(如用户3453425所述) - 可能是由于其中一个输入是常量,因此标准偏差为零.

在这种情况下pearsonr(X, Y)返回(nan, 1.0).因此,当皮尔逊相关系数未定义时,请确保处理该情况(nan).