Ich habe nach anderen Posts gesucht, da ich dachte, dass dies ein ziemlich häufiges Problem ist, aber alle anderen Python-Ausnahmefragen, die ich gefunden habe, spiegelten mein Problem nicht wider.Korrekter Weg, Ausnahmen in Python zu behandeln?
Ich werde versuchen, so spezifisch wie möglich zu sein, also werde ich ein direktes Beispiel geben. Und peeeeease postet keine Problemumgehungen für dieses spezielle Problem. Ich bin nicht speziell daran interessiert, wie man mit xyz eine Email viel schöner versenden kann. Ich möchte wissen, wie Sie im Allgemeinen mit abhängigen, fehleranfälligen Aussagen umgehen.
Meine Frage ist, wie man Ausnahmen gut behandelt, die voneinander abhängen, was bedeutet: Nur wenn der erste Schritt erfolgreich war, versuchen Sie die nächste, und so weiter. Ein weiteres Kriterium ist: Alle Ausnahmen müssen abgefangen werden, dieser Code muss robust sein.
Für Ihre Überlegung, ein Beispiel:
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
Das sieht extrem unpythonic mir, und der Fehlercode Handhabung ist das Dreifache der realen Business-Code, aber auf der anderen Seite, wie kann ich einige Aussagen behandeln, sind voneinander abhängig, dh Aussage1 ist Voraussetzung für Aussage2 und so weiter?
Ich interessiere mich auch für die ordnungsgemäße Ressourcenbereinigung, sogar Python kann das für sich selbst verwalten.
Danke, Tom
danke für die Bearbeitung dbr, aber bitte nicht bearbeiten Dinge, die Sie nicht selbst sicher sind. Ich bearbeitet zurück Kriterien zu Kriterium, das ist in der Tat die Einzahl, wie ein Plural keinen Sinn macht, wo Sie es bearbeitet. – Tom
Opps, tut mir leid (hm, glaube nicht, dass ich jemals die Singular der Kriterien gehört habe ..) – dbr