Ho cercato altri post, in quanto ritenevo che fosse un problema piuttosto comune, ma tutte le altre domande di eccezione di Python che ho trovato non riflettevano il mio problema.Modo corretto di gestire le eccezioni in Python?
Cercherò di essere il più specifico possibile, quindi darò un esempio diretto. E per favore non pubblicare alcuna soluzione alternativa per questo problema specifico. Non sono particolarmente interessato a come è possibile inviare un'e-mail molto più bella con xyz. Voglio sapere in che modo generalmente gestisci le istruzioni dipendenti e soggette a errori.
La mia domanda è, come gestire bene le eccezioni, quelle che dipendono l'una dall'altra, ovvero: Solo se il primo passaggio ha avuto esito positivo, provare il successivo e così via. Un altro criterio è: tutte le eccezioni devono essere catturate, questo codice deve essere robusto.
Per la vostra considerazione, un esempio:
try:
server = smtplib.SMTP(host) #can throw an exception
except smtplib.socket.gaierror:
#actually it can throw a lot more, this is just an example
pass
else: #only if no exception was thrown we may continue
try:
server.login(username, password)
except SMTPAuthenticationError:
pass # do some stuff here
finally:
#we can only run this when the first try...except was successful
#else this throws an exception itself!
server.quit()
else:
try:
# this is already the 3rd nested try...except
# for such a simple procedure! horrible
server.sendmail(addr, [to], msg.as_string())
return True
except Exception:
return False
finally:
server.quit()
return False
Questo sembra estremamente unpythonic a me, e la gestione di codice di errore è il triplo il codice vero e proprio business, ma d'altra parte come posso gestire diverse affermazioni dipendenti l'uno dall'altro, il significato di statement1 è un prerequisito per statement2 e così via?
Sono interessato anche alla corretta pulizia delle risorse, anche Python può gestirlo da solo.
Grazie, Tom
grazie per la modifica di dbr, ma per favore non modificare le cose che non sono sicuro di te. Ho modificato i criteri in base al criterio, che è effettivamente il singolare, in quanto il plurale non ha senso dove lo hai modificato – Tom
Opps, mi dispiace (non credo di aver mai sentito prima il singolare dei criteri ..) – dbr