Geschachtelte Ausnahmen?
Wird das funktionieren?
try:
try:
field.value = filter(field.value, fields=self.fields, form=self, field=field)
except TypeError:
field.value = filter(field.value)
except ValidationError, e:
field.errors += e.args
field.value = revert
valid = False
break
Nämlich dann, wenn die erste Zeile löst ein ValidationError
, wird die zweite except
fangen?
Ich würde geschrieben haben es un-verschachtelte, aber die zweite filter-Anweisung kann scheitern auch! Und ich will das gleiche ValidationError
block zu fangen, dass, wie gut.
Ich würde es testen und mich, aber dieser code ist so verwoben jetzt ist es schwierig, die Reise es richtig 🙂
Als seitliche Anmerkung, ist es schlecht auf Sie verlassen, fangen die TypeError
und Weitergabe nur in einer arg statt? d.h., absichtlich unterlassen, einige Argumente, die, wo Sie nicht benötigt werden?
- Sie nicht haben, um zu testen, code-in-place. Es wäre ziemlich einfach zu erstellen Sie eine neue python-Skript, und stecken Sie nur in einer Ausnahme-raising-Linie, wo Sie wollen, um zu testen, ob das Verhalten.
- Du hast Recht... ich denke, es war einfacher, auf der Bühne das experiment, als ich dachte.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn die filter-Anweisung in der inneren try-wirft eine exception, es wird zuerst überprüft werden, gegen den inneren "außer" - Aussagen, und dann, wenn keiner von denen zu fangen, wird es überprüft werden, gegen die äußeren "außer" - Anweisungen.
Können Sie sich selbst davon überzeugen dies ist der Fall nur, indem er etwas einfach so aus (dies wird nur drucken, "Fing der Wert error"):
Als weiteres Beispiel, sollte man dieses print "Fing die innere ValueError" nur:
Kompliment Brent ' s Antwort, und testen den anderen Fall:
Ausgegeben: