Jak uciszyć błąd „sys.excepthook brakuje”?

NB: Nie próbowałem odtworzyć problemu opisanego poniżej w systemie Windows lub wersji Pythona innych niż 2.7.3.

Najbardziej niezawodnym sposobem na rozwiązanie omawianego problemu jest przetransportowanie wyników następującego skryptu testowego: (podbash):

try:
    for n in range(20):
        print n
except:
    pass

To znaczy.:

% python testscript.py | :
close failed in file object destructor:
sys.excepthook is missing
lost sys.stderr

Moje pytanie brzmi:

Jak mogę zmodyfikować skrypt testowy powyżej aby uniknąć komunikatu o błędzie, gdy skrypt jest uruchamiany w pokazany sposób (w systemie Unix /bash)?

(Jak pokazuje skrypt testowy, błędu nie można złapać za pomocą atry-except.)

Powyższy przykład jest wprawdzie wysoce sztuczny, ale napotykam na ten sam problemczasami kiedy wyjście mojego skryptu jest przesyłane strumieniowo przez oprogramowanie innych firm.

Komunikat o błędzie jest z pewnością nieszkodliwy, ale jest niepokojący dla użytkowników końcowych, więc chciałbym go uciszyć.

EDYCJA: Poniższy skrypt, który różni się od oryginalnego powyżej tylko tym, że redefiniuje sys.excepthook, zachowuje się dokładnie tak, jak podano powyżej.

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

questionAnswers(4)

yourAnswerToTheQuestion