Модуль предупреждений не работает в Python 2.7?

Я не могу заставить модуль предупреждений работать в Python 2.7 Внутри пользовательской функции у меня есть:

warnings.simplefilter('always', UserWarning) #added after wouldn't work 
warnings.warn('WARNING: ....')
print "Why didn't the warning above show up?"

Появится оператор печати, но не предупреждение на терминале. Я также сделал предупреждения об импорте. Не уверен, что происходит.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
361
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте разместить под warnings.warn('WARNING: ....') этот вызов: sys.stderr.flush()

Если вы проверите документацию модуля предупреждения, вы обнаружите: «Решение о том, выдавать ли предупреждающее сообщение, контролируется фильтром предупреждений, который представляет собой последовательность соответствующих правил и действий». Может быть проблема с фильтром. Попробуйте сначала очистить stderr и посмотрите, что произойдет.

Эй, это сработало! Спасибо! Я немного запутался, почему это произошло? Если бы у меня не было stackoverflow, я бы сейчас облажался. Кажется странным, что иногда это срабатывало, а другие - нет ...

masque 07.08.2018 22:16

Стандартный вывод Python является буферизированным (это означает, что он собирает некоторые данные, «записанные» в стандарте, прежде чем записать их в терминал). Вызов sys.stdout.flush () / sys.stderr.flush () заставляет его «очистить» буфер, что означает, что он будет записывать все, что есть в буфере, на терминал, даже если обычно он будет ждать перед этим.

Michael B 07.08.2018 22:24

Хорошо спасибо. Кроме того, почему я не могу написать на следующей строке? warnings.warn ('..... \ continue'), где продолжение находится на следующей строке в среде IDE. Это дает мне ошибку, но это то же продолжение строки, что и всегда

masque 07.08.2018 22:25

Неуверенный, что вы имеете в виду под следующей строкой; но вы можете захотеть изучить escape-символы Python, такие как \ n, которые принудительно выводят на новую строку. Похоже, warnings.formatwarning(message, category, filename, lineno[, line]) поддерживает вывод в новую строку. docs.python.org/2/library/warnings.html

Michael B 07.08.2018 22:32

Привет, нет, я просто хочу сказать, что не могу продолжить с того места, где остановился, на новой строке. Мое сообщение довольно длинное, и я не хочу писать все в одной строке, поэтому я хочу продолжить с того места, где остановился, на следующей строке, не выдавая нового предупреждения. \ - это символ, который обычно работает, но здесь он не работает

masque 07.08.2018 23:08

В моем случае это сработало после запуска sys.stout.flush(). Не совсем понимаю, почему или чем это вызвано, но это решило проблему. Следует отметить, что это все еще происходило после перезапуска ядра jupyter.

Sos 18.10.2019 16:33

Другие вопросы по теме