Como silenciar o erro "sys.excepthook está faltando"?
NB: Eu não tentei reproduzir o problema descrito abaixo no Windows, ou com versões do Python diferentes do 2.7.3.
A maneira mais confiável de obter o problema em questão é canalizar a saída do script de teste a seguir:
(debaixobash
):
try:
for n in range(20):
print n
except:
pass
Ou seja:
% python testscript.py | :
close failed in file object destructor:
sys.excepthook is missing
lost sys.stderr
Minha pergunta é:
Como posso modificar o script de teste acima? para evitar a mensagem de erro quando o script é executado como mostrado (em Unix /bash
)
(Como mostra o script de teste, o erro não pode ser preso comtry-except
.)
O exemplo acima é, reconhecidamente, altamente artificial, mas estou correndo para o mesmo problemaas vezes quando a saída de um script meu é canalizada através de algum software de terceiros.
A mensagem de erro é certamente inofensiva, mas é desconcertante para os usuários finais, então eu gostaria de silenciá-la.
EDIT: O script a seguir, que difere do original acima apenas em que redefine sys.excepthook, se comporta exatamente como o dado acima.
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