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 Trueou 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 == Truepeça ou devo adicionar um tipo de dados tri-bool. Não quero que a simulatefunção gere uma exceção, pois tudo o que quero que o programa externo faça com um erro é registrá-lo e continuar.
simulatefunçã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.
simulatetem 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, simulateestá feito. Retornar Nonenão é tão útil quanto gerar uma exceção adequada - ou permitir que uma exceção se propague simulateno script de chamada para manipulação.
except Exception:vez disso. Isso captura todos os erros "reais", junto com Warninge StopIteration. Permite KeyboardInterrupte SystemExitatravé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