Трассировка с предупреждения
У меня есть код, который в какой-то момент показывает предупреждение, я думаю, что у него проблема с вычислением 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
Вы можете включить предупреждения в исключения:
import warnings
warnings.simplefilter("error")
Теперь вместо того, чтобы печатать предупреждение, будет создано исключение, которое даст вам трассировку.
Вы можете получить тот же эффект с помощью -W
командной строки:
$ python -W error somescript.py
или установив переменную среды PYTHONWARNINGS
:
$ export PYTHONWARNINGS=error
Вы можете играть с другим warnings.simplefilter()
arguments, чтобы более конкретно о том, какое предупреждение должно вызвать исключение. Вы можете фильтровать на warnings.RuntimeWarning
и номер строки, например.