关于python:来自警告的追溯

traceback from a warning

我有一个代码,它在某个时刻显示了一个警告,我认为它在计算一个mean()时有问题。

我想知道是否有任何方法可以强制python告诉我在哪里、哪一行,或者其他信息,而不仅仅是这个消息:

1
2
3
4
5
6
C:\Python27\lib\site-packages
umpy\core\_methods.py:55: RuntimeWarning: Mean of empty slice.
  warnings.warn("Mean of empty slice.", RuntimeWarning)
C:\Python27\lib\site-packages
umpy\core\_methods.py:79: RuntimeWarning: Degrees of freedom <= 0 for slice
  warnings.warn("Degrees of freedom <= 0 for slice", RuntimeWarning)

我不知道是否可以"捕获"警告…..如果我有任何错误,通常我使用的是回溯包:

import traceback

然后我通常会这样做:

1
2
3
4
try:
    #something
except:
    print traceback.format_exc()


您可以将警告转换为异常:

1
2
3
import warnings

warnings.simplefilter("error")

现在,将不会打印警告,而是引发一个异常,为您提供一个回溯。

您可以使用-W命令行开关获得相同的效果:

1
$ python -W error somescript.py

或者通过设置PYTHONWARNINGS环境变量:

1
$ export PYTHONWARNINGS=error

您可以使用其他warnings.simplefilter()参数,以更具体地说明什么警告会引发异常。例如,您可以过滤warnings.RuntimeWarning和行号。