maksimilian hat geschrieben: ↑Mittwoch 5. Dezember 2018, 12:48
Offensichtlich habe ich die Funktion von try/except noch nicht vollständig verstanden. Ich dachte, dass except Abbrüche durch Fehler verhindert.
Mach dir einfach bewusst, dass man mit
except einen Fehler behandelt, aber auch dass der Programmfluss nach der Behandlung weitergeht. Wenn du irgendwas loggen willst, dann ist das okay. Aber du solltest bei einem inkonsistenten Zustand (Verbindung wurde nicht erstellt und der Bezeichner
db existiert nicht) möglichst aussteigen, da dann in der Regel keine sinnvolle Gegenmaßnahme möglich ist.
Man kann z.B. so etwas machen:
Code: Alles auswählen
def connect(uri):
try:
db = pymysql.connect(uri)
except Exception as exc:
writelog(exc)
raise
# Wird beim raise nicht erreicht
return db
Ein
raise ohne weitere Zusätze wirft den zuletzt abgefangenen Fehler erneut. Er loggt den Fehler also und zusätzlich kann darüber liegender Code eine eigene Fehlerbehandlung durchführen. Es wäre sinnvoll, z.B. beim Aufruf des Programms aus einer Shell eine Fehlermeldung via
print() auszugeben. Dabei kann man durchaus den Fehlertext der Exception übernehmen, damit man kein allgemeines Blabla hat. Oder der Nutzer wird auf der Shell nach der korrekten URI gefragt. Je nachdem wie man das halt handhaben möchte. Aber man muss das eben ausprogrammieren.