803 Stimmen

Welchen Zweck erfüllt die optionale "else"-Klausel der "try"-Anweisung in Python?

Was ist der Verwendungszweck der optionalen else Klausel des try Aussage?

5 Stimmen

Die meisten Antworten scheinen sich darauf zu konzentrieren, warum wir das Material in der else-Klausel nicht einfach in die try-Klausel selbst einfügen können. Die Frage stackoverflow.com/questions/3996329 fragt ausdrücklich, warum der Code der else-Klausel nicht gehen kann nach der Try-Block selbst, und diese Frage ist mit dieser hier verknüpft, aber ich sehe hier keine klare Antwort auf diese Frage. Ich glaube stackoverflow.com/a/3996378/1503120 beantwortet diese Frage in hervorragender Weise. Ich habe auch versucht, die verschiedenen Bedeutungen der einzelnen Klauseln zu erläutern stackoverflow.com/a/22579805/1503120 .

2 Stimmen

Wenn die Ausnahme nicht auslöst, soll vor der abschließenden Bereinigung etwas geschehen, das nicht selbst die gleiche Ausnahmebehandlung auslösen soll.

5 Stimmen

Nachdem ich vergessen hatte, was else tut in try/else y for/else Ich habe es mehrmals mit dem Begriff noexcept y nobreak in diesen jeweiligen Zusammenhängen. Ich persönlich halte es für eine so unglückliche Überfrachtung des Wortes, dass ich versuche, es nach Möglichkeit zu vermeiden, da es die Leute, die den Code lesen, dazu zwingt, sich zu fragen: "Was macht dieses Ding nochmal?" Normalerweise ist ein Flag, eine continue o break Aussage kann das, was ich ausdrücken will, mit wenigen zusätzlichen Zeilen, aber sicherlich mit mehr Klarheit wiedergeben (wenn die Popularität der Frage ein Hinweis darauf ist).

13voto

Unknown Punkte 44574

Auch wenn Ihnen im Moment keine Verwendung dafür einfällt, können Sie darauf wetten, dass es eine Verwendung dafür geben muss. Hier ist ein einfallsloses Beispiel:

Mit else :

a = [1,2,3]
try:
    something = a[2]
except:
    print "out of bounds"
else:
    print something

Ohne else :

try:
    something = a[2]
except:
    print "out of bounds"

if "something" in locals():
    print something

Hier haben Sie die Variable something definiert, wenn kein Fehler ausgelöst wird. Sie können dies außerhalb der try Blocks, aber dann ist eine unübersichtliche Erkennung erforderlich, wenn eine Variable definiert ist.

6 Stimmen

Was ist falsch an something = a[2]; print something innerhalb des try:-Blocks?

0 Stimmen

@ S.Lott nichts, aber was ist, wenn Ihnen jemand eine Liste schickt und Sie die Daten nicht anzeigen wollen, wenn sie nicht lang genug sind, weil sie wahrscheinlich beschädigt sind?

14 Stimmen

S. Lott: "print something" könnte eine andere Ausnahme auslösen, die man nicht abfangen will.

11voto

itsadok Punkte 27963

Es gibt ein schönes Beispiel für try-else sur PEP 380 . Im Grunde läuft es darauf hinaus, dass in den verschiedenen Teilen des Algorithmus unterschiedliche Ausnahmen behandelt werden.

Es ist in etwa so:

try:
    do_init_stuff()
except:
    handle_init_suff_execption()
else:
    try:
        do_middle_stuff()
    except:
        handle_middle_stuff_exception()

Auf diese Weise können Sie den Code für die Behandlung von Ausnahmen näher an dem Ort schreiben, an dem die Ausnahme auftritt.

8voto

fedorqui Punkte 249453

Desde Fehler und Ausnahmen # Behandlung von Ausnahmen - docs.python.org

Le site try ... except Anweisung hat eine optionale else Klausel, die, wenn vorhanden, allen except-Klauseln folgen muss. Sie ist nützlich für Code der ausgeführt werden muss, wenn die try-Klausel keine Ausnahme auslöst. Zum Beispiel:

for arg in sys.argv[1:]:
    try:
        f = open(arg, 'r')
    except IOError:
        print 'cannot open', arg
    else:
        print arg, 'has', len(f.readlines()), 'lines'
        f.close()

Die Verwendung der else-Klausel ist besser als das Hinzufügen von zusätzlichem Code zur der try-Klausel hinzuzufügen, weil dadurch vermieden wird, dass versehentlich eine Ausnahme abgefangen wird die nicht durch den Code ausgelöst wurde, der durch die try-Klausel geschützt ist ... außer Anweisung geschützt ist.

8voto

Shivam Bharadwaj Punkte 1554
try:
    statements # statements that can raise exceptions
except:
    statements # statements that will be executed to handle exceptions
else:
    statements # statements that will be executed if there is no exception

Beispiel:

try:
    age=int(input('Enter your age: '))
except:
    print ('You have entered an invalid value.')
else:
    if age <= 21:
        print('You are not allowed to enter, you are too young.')
    else:
        print('Welcome, you are old enough.')

Die Ausgabe :

>>> 
Enter your age: a
You have entered an invalid value.
>>> RESTART
>>> 
Enter your age: 25
Welcome, you are old enough.
>>>RESTART
>>> 
Enter your age: 13
You are not allowed to enter, you are too young.
>>>

Kopiert von: https://geek-university.com/python/the-try-except-else-statements/

6voto

stefanB Punkte 72857

Blick auf Python-Referenz es scheint, dass else wird ausgeführt, nachdem try wenn es keine Ausnahme gibt. Die optionale else-Klausel wird ausgeführt, wenn die Kontrolle über das Ende der try-Klausel hinausgeht. 2 Ausnahmen in der else-Klausel werden von den vorangehenden except-Klauseln nicht behandelt.

Eintauchen in Python hat ein Beispiel, in dem, wenn ich es richtig verstehe, in try Block versuchen sie, ein Modul zu importieren. Wenn das fehlschlägt, erhalten Sie eine Ausnahme und binden Standard, aber wenn es funktioniert, haben Sie eine Option, um in else Block und binden, was erforderlich ist (siehe Link für das Beispiel und die Erklärung).

Wenn Sie versuchen würden, die Arbeit in catch Block kann es zu einer weiteren Ausnahme kommen - ich schätze, das ist der Punkt, an dem die else Block praktisch ist.

6 Stimmen

"Ausnahmen in der else-Klausel werden von den vorhergehenden except-Klauseln nicht behandelt." Das ist der nützliche Teil. Ich danke Ihnen.

0 Stimmen

"Die optionale else-Klausel wird ausgeführt, wenn die Kontrolle über das Ende der try-Klausel hinausgeht" ist ein weiterer Unterschied, da man aus der try Block.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X