Как узнать, откуда приходит предупреждение в Python

1

Можно ли отображать номер строки вместе с предупреждениями? Я получаю некоторые предупреждения, возможно, от numpy, но я понятия не имею, откуда они взялись. Я не хочу, чтобы мой код находился на борту или вызывал исключение, но я хотел бы получить дополнительную информацию о происхождении предупреждений. Возможно ли это?

Теги:
numpy
warnings

3 ответа

1
Лучший ответ

Предупреждения, которые выдаются через модуль warnings, по умолчанию печатаются, включая имя файла и номер строки, а выход может управляться функциями модуля warnings, а также параметром -W Python-интерпретатор. Поскольку ваши предупреждения, по-видимому, не включают имя файла и номер строки, модуль warnings, вероятно, вам не поможет. Поскольку вы подозреваете, что numpy может быть виновником, я предлагаю взглянуть на numpy.seterr(). Может быть, поворот предупреждений в ошибки помогает.

1

Напишите отдельный модуль, подобный этому.

import warnings

# capture all warnings
with warnings.catch_warnings(record=True) as warns:
    warnings.simplefilter("always")
    # do the stuff that triggers warnings.  i.e. import your main module
    # and call whatever is necessary to get it going.  This must all be
    # indented under the with statement!

# afterward, print captured warnings
for w in warns:
    print w.category.__name__, "(%s)" % w.message,
    print "in", w.filename, "at line", w.lineno
0

EDIT:

Arg! Я необъяснимо назвал это неправильным.

Используйте модуль pychecker. Если у вас установлены distutils, просто введите: easy_install pychecker в командной строке, чтобы получить самую новую версию. По умолчанию генерирует предупреждения и перечисляет номера строк для них.

  • 0
    @Charles Brunet К сожалению об этом. Я перепутал названия своих модулей. Это на самом деле пичекер. И он может войти в ваши вызываемые модули при необходимости, чтобы он мог проверить numpy для вас.
  • 0
    Pychecker анализирует источник, он ничего не делает с ошибками и предупреждениями во время выполнения.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню