从警告中追溯

时间:2014-07-01 14:38:35

标签: python warnings traceback

我有一个代码,在某些时候显示警告,我认为它在计算mean()

时遇到问题

我想知道是否有任何方法可以强制python告诉我哪里,或哪行,或者除了这条消息以外的其他信息:

C:\Python27\lib\site-packages\numpy\core\_methods.py:55: RuntimeWarning: Mean of empty slice.
  warnings.warn("Mean of empty slice.", RuntimeWarning)
C:\Python27\lib\site-packages\numpy\core\_methods.py:79: RuntimeWarning: Degrees of freedom <= 0 for slice
  warnings.warn("Degrees of freedom <= 0 for slice", RuntimeWarning)

我不知道是否有可能“抓住”警告..​​...如果我有任何错误,通常我会使用追溯包:

import traceback

然后我通常会这样做:

try:
    #something
except:
    print traceback.format_exc()

1 个答案:

答案 0 :(得分:34)

您可以将警告变为例外:

import warnings

warnings.simplefilter("error")

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

您可以使用-W command line switch获得相同的效果:

$ python -W error somescript.py

或设置PYTHONWARNINGS environment variable

$ export PYTHONWARNINGS=error

您可以与其他warnings.simplefilter() arguments一起使用,以更具体地说明应该引发异常的警告。例如,您可以对warnings.RuntimeWarning和行号进行过滤。