Tengo una función que puede devolver una de tres cosas:
- éxito (
True) - fracaso (
False) - error al leer / analizar secuencia (
None)
Mi pregunta es, si se supone que no debo hacer una prueba Trueo False, ¿cómo debo ver cuál es el resultado? A continuación se muestra cómo lo estoy haciendo actualmente:
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"
¿es realmente tan simple como eliminar la == Trueparte o debo agregar un tipo de datos tri-bool? No quiero que la simulatefunción arroje una excepción, ya que todo lo que quiero que haga el programa externo con un error es registrarlo y continuar.
simulatefunción capto todas las excepciones; No quiero que ocurra nada dentro del simulador para detener el resto del programa en ejecución (y procesar el siguiente elemento). Pero las respuestas me están haciendo cambiar de opinión.
simulatetiene cosas que puede atrapar y volver a intentar, está bien. Pero si "falla", no debería volver None. Simplemente debería generar una excepción al script que lo llamó. De cualquier manera, simulateestá hecho. Volver Noneno es tan útil como generar una excepción adecuada, o permitir que una excepción se propague a través simulatedel script de llamada para su manejo.
except Exception:en su lugar. Esto detecta todos los errores "reales", junto con Warningy StopIteration. Sin embargo, permite KeyboardInterrupty a SystemExittravés. Si realmente quiere atraparlos, probablemente sea mejor usar otro try / except externo o alguna otra estructura que documente claramente su intención, ya que esos no son "errores". (Pero dije "casi nunca" ... tal vez en su caso realmente quiera agarrar todo, e incluso evitar que Ctrl-C o sys.exit()salir, etc.)