Ich lerne Python und bin auf ein Konzept gestoßen, das ich nicht ohne weiteres verdauen kann: den optionalen Block else
im Konstrukt try
.
Laut die Dokumentation :
Die Anweisung try ... except hat eine optionale else-Klausel, die, wenn Gegenwart, müssen alle außer Klauseln folgen. Es ist für Code das nützlich muss ausgeführt werden, wenn die try-Klausel keine Ausnahme auslöst.
Was mich verwirrt, ist der Grund dafür, dass der -Code ausgeführt werden muss, wenn die try-Klausel keine Exception innerhalb des try-Konstrukts auslöst - warum sollte sie nicht einfach try / except at folgen? die gleiche Einrückungsebene? Ich denke, es würde die Optionen für die Ausnahmebehandlung vereinfachen. Oder eine andere Art zu fragen wäre, was der Code im Block else
tun würde, würde nicht getan, wenn er einfach der try-Anweisung folgen würde, unabhängig davon. Vielleicht vermisse ich etwas, erleuchte mich.
Diese Frage ähnelt dieser , aber ich konnte dort nicht finden, wonach ich suche .
Der else
-Block wird nur ausgeführt, wenn der Code in try
keine Ausnahme auslöst; Wenn Sie den Code außerhalb des Blocks else
platzieren, geschieht dies unabhängig von Ausnahmen. Auch passiert es vor dem finally
, was generell wichtig ist.
Dies ist im Allgemeinen nützlich, wenn Sie einen kurzen Setup- oder Verifizierungsabschnitt haben, bei dem möglicherweise ein Fehler auftritt, gefolgt von einem Block, in dem Sie die Ressourcen verwenden, die Sie eingerichtet haben und in denen Sie Fehler nicht ausblenden möchten. Sie können den Code nicht in try
einfügen, da Fehler möglicherweise zu except
-Klauseln gehen, wenn sie propagiert werden sollen. Sie können es nicht außerhalb des Konstrukts platzieren, da die Ressourcen dort definitiv nicht verfügbar sind, entweder weil das Setup fehlgeschlagen ist oder weil finally
alles heruntergerissen hat. Daher haben Sie einen else
-Block.
Ein Anwendungsfall kann sein, zu verhindern, dass Benutzer eine Flag-Variable definieren, um zu prüfen, ob eine Ausnahme ausgelöst wurde oder nicht (wie in for-else
loop).
Ein einfaches Beispiel:
%Vor%Ausgabe:
%Vor%Tags und Links python exception-handling try-catch