Ho una funzione che può restituire una delle tre cose:
- successo (
True) - fallimento (
False) - errore durante la lettura / analisi del flusso (
None)
La mia domanda è, se non dovrei provare contro Trueo False, come dovrei vedere quale sia il risultato. Di seguito è come lo sto facendo attualmente:
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"
è davvero semplice come rimuovere la == Trueparte o devo aggiungere un tipo di dati tri-bool. Non voglio che la simulatefunzione generi un'eccezione poiché tutto ciò che voglio che il programma esterno faccia con un errore è registrarlo e continuare.
simulatefunzione colgo tutte le eccezioni; Non voglio che ciò che accade all'interno del simulatore interrompa il resto del programma in esecuzione (e l'elaborazione dell'elemento successivo). Ma le risposte mi stanno facendo cambiare idea.
simulatecose che può catturare e riprovare, va bene. Ma se "fallisce", non dovrebbe tornare None. Dovrebbe solo sollevare un'eccezione allo script che lo ha chiamato. Ad ogni modo, simulateè fatto. Restituire Nonenon è utile quanto sollevare un'eccezione adeguata o consentire a un'eccezione di propagarsi simulatenello script chiamante per la gestione.
except Exception:invece. Questo rileva tutti gli errori "reali", insieme a Warninge StopIteration. Permette KeyboardInterrupte SystemExitattraverso però. Se vuoi davvero catturarli, probabilmente è meglio usare un altro tentativo esterno / tranne o qualche altra struttura che documenta chiaramente le tue intenzioni, dal momento che questi non sono "errori". (Ma ho detto "quasi mai" ... forse nel tuo caso vuoi davvero prendere tutto, e persino impedire a Ctrl-C o sys.exit()di uscire, ecc.)