警告的回溯信息

17 投票
1 回答
10845 浏览
提问于 2025-04-18 11:44

我有一段代码,在某个时候会显示一个警告,我觉得它在计算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)

我不知道是否可以“捕捉”到这个警告……如果我遇到错误,通常我会使用traceback这个包:

import traceback

然后我通常会这样做:

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

1 个回答

37

你可以把警告变成异常:

import warnings

warnings.simplefilter("error")

这样一来,程序就不会只是打印一个警告,而是会抛出一个异常,并给你一个错误追踪信息。

你也可以通过使用-W这个命令行选项来达到同样的效果:

$ python -W error somescript.py

或者通过设置PYTHONWARNINGS这个环境变量来实现:

$ export PYTHONWARNINGS=error

你还可以尝试其他warnings.simplefilter()的参数,更具体地指定哪些警告应该抛出异常。比如,你可以根据warnings.RuntimeWarning和某个行号来过滤。

撰写回答