Как заставить замолчать ошибку «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

Ответы на вопрос(4)

Ваш ответ на вопрос