Как заставить замолчать ошибку «sys.excepthook отсутствует»?
NB. Я не пытался воспроизвести проблему, описанную ниже в Windows, или в версиях Python, отличных от 2.7.3.
Самый надежный способ выявить данную проблему - передать выходные данные следующего тестового сценария через:
(подbash
):
try:
for n in range(20):
print n
except:
pass
т.е .:
% python testscript.py | :
close failed in file object destructor:
sys.excepthook is missing
lost sys.stderr
Мой вопрос:
How can I modify the test script above to avoid the error message when the script is run as shown (under Unix/bash
)?
(Как показывает тестовый скрипт, ошибка не может быть перехваченаtry-except
.)
Приведенный выше пример, по общему признанию, очень искусственный, но я сталкиваюсь с той же проблемойsometimes когда вывод моего скрипта передается через какое-то стороннее программное обеспечение.
Сообщение об ошибке, безусловно, безвредно, но оно сбивает с толку конечных пользователей, поэтому я хотел бы заставить его замолчать.
РЕДАКТИРОВАТЬ: Следующий скрипт, который отличается от исходного выше только тем, что переопределяет sys.excepthook, ведет себя точно так же, как приведенный выше.
import sys
STDERR = sys.stderr
def excepthook(*args):
print >> STDERR, 'caught'
print >> STDERR, args
sys.excepthook = excepthook
try:
for n in range(20):
print n
except:
pass