Eu tenho uma função que pode retornar uma das três coisas:
- sucesso (
True
) - falha (
False
) - erro ao ler / analisar o fluxo (
None
)
Minha pergunta é: se não devo testar contra True
ou False
, como devo ver qual é o resultado. Abaixo está como eu estou fazendo isso atualmente:
result = simulate(open("myfile"))
if result == None:
print "error parsing stream"
elif result == True: # shouldn't do this
print "result pass"
else:
print "result fail"
é realmente tão simples quanto remover a == True
peça ou devo adicionar um tipo de dados tri-bool. Não quero que a simulate
função gere uma exceção, pois tudo o que quero que o programa externo faça com um erro é registrá-lo e continuar.
simulate
função, pego todas as exceções; Não quero que nada que aconteça dentro do simulador pare o restante do programa em execução (e processe o próximo elemento). Mas as respostas estão me fazendo mudar de idéia.
simulate
tem coisas que pode capturar e tentar novamente, isso é bom. Mas se "falhar", não deve retornar None
. Deve apenas gerar uma exceção para o script que o chamou. De qualquer maneira, simulate
está feito. Retornar None
não é tão útil quanto gerar uma exceção adequada - ou permitir que uma exceção se propague simulate
no script de chamada para manipulação.
except Exception:
vez disso. Isso captura todos os erros "reais", junto com Warning
e StopIteration
. Permite KeyboardInterrupt
e SystemExit
através de embora. Se você realmente deseja capturá-los, provavelmente é melhor usar outra tentativa / exceção externa ou alguma outra estrutura que documente claramente sua intenção, pois esses não são "erros". (Mas eu disse "quase nunca" ... talvez no seu caso você realmente queira pegar tudo, e até impedir que o Ctrl-C ou a sys.exit()
saída, etc.) seja o que for