Warum sollte ich sonst in try / except in Python konstruieren?

8

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 .

    
amphibient 22.08.2013, 17:56
quelle

2 Antworten

11

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.

    
user2357112 22.08.2013, 17:59
quelle
4

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%     
Ashwini Chaudhary 22.08.2013 18:08
quelle