Я не могу заставить модуль предупреждений работать в Python 2.7 Внутри пользовательской функции у меня есть:
warnings.simplefilter('always', UserWarning) #added after wouldn't work
warnings.warn('WARNING: ....')
print "Why didn't the warning above show up?"
Появится оператор печати, но не предупреждение на терминале. Я также сделал предупреждения об импорте. Не уверен, что происходит.
Попробуйте разместить под warnings.warn('WARNING: ....')
этот вызов: sys.stderr.flush()
Если вы проверите документацию модуля предупреждения, вы обнаружите: «Решение о том, выдавать ли предупреждающее сообщение, контролируется фильтром предупреждений, который представляет собой последовательность соответствующих правил и действий». Может быть проблема с фильтром. Попробуйте сначала очистить stderr и посмотрите, что произойдет.
Стандартный вывод Python является буферизированным (это означает, что он собирает некоторые данные, «записанные» в стандарте, прежде чем записать их в терминал). Вызов sys.stdout.flush () / sys.stderr.flush () заставляет его «очистить» буфер, что означает, что он будет записывать все, что есть в буфере, на терминал, даже если обычно он будет ждать перед этим.
Хорошо спасибо. Кроме того, почему я не могу написать на следующей строке? warnings.warn ('..... \ continue'), где продолжение находится на следующей строке в среде IDE. Это дает мне ошибку, но это то же продолжение строки, что и всегда
Неуверенный, что вы имеете в виду под следующей строкой; но вы можете захотеть изучить escape-символы Python, такие как \ n, которые принудительно выводят на новую строку. Похоже, warnings.formatwarning(message, category, filename, lineno[, line])
поддерживает вывод в новую строку. docs.python.org/2/library/warnings.html
Привет, нет, я просто хочу сказать, что не могу продолжить с того места, где остановился, на новой строке. Мое сообщение довольно длинное, и я не хочу писать все в одной строке, поэтому я хочу продолжить с того места, где остановился, на следующей строке, не выдавая нового предупреждения. \ - это символ, который обычно работает, но здесь он не работает
В моем случае это сработало после запуска sys.stout.flush()
. Не совсем понимаю, почему или чем это вызвано, но это решило проблему. Следует отметить, что это все еще происходило после перезапуска ядра jupyter.
Эй, это сработало! Спасибо! Я немного запутался, почему это произошло? Если бы у меня не было stackoverflow, я бы сейчас облажался. Кажется странным, что иногда это срабатывало, а другие - нет ...