Подтвердить что ты не робот

Трассировка с предупреждения

У меня есть код, который в какой-то момент показывает предупреждение, я думаю, что у него проблема с вычислением 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()
4b9b3361

Ответ 1

Вы можете включить предупреждения в исключения:

import warnings

warnings.simplefilter("error")

Теперь вместо того, чтобы печатать предупреждение, будет создано исключение, которое даст вам трассировку.

Вы можете получить тот же эффект с помощью -W командной строки:

$ python -W error somescript.py

или установив переменную среды PYTHONWARNINGS:

$ export PYTHONWARNINGS=error

Вы можете играть с другим warnings.simplefilter() arguments, чтобы более конкретно о том, какое предупреждение должно вызвать исключение. Вы можете фильтровать на warnings.RuntimeWarning и номер строки, например.