我有一个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%
如何让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).