从警告中追溯

cod*_*ler 14 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)
Run Code Online (Sandbox Code Playgroud)

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

import traceback

然后我通常做:

try:
    #something
except:
    print traceback.format_exc()
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 34

您可以将警告变为例外:

import warnings

warnings.simplefilter("error")
Run Code Online (Sandbox Code Playgroud)

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

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

$ python -W error somescript.py
Run Code Online (Sandbox Code Playgroud)

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

$ export PYTHONWARNINGS=error
Run Code Online (Sandbox Code Playgroud)

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