Was ist der Verwendungszweck der optionalen else
Klausel des try
Aussage?
Was ist falsch an something = a[2]; print something
innerhalb des try:-Blocks?
Was ist der Verwendungszweck der optionalen else
Klausel des try
Aussage?
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.
@ 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?
S. Lott: "print something" könnte eine andere Ausnahme auslösen, die man nicht abfangen will.
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.
Desde Fehler und Ausnahmen # Behandlung von Ausnahmen - docs.python.org
Le site
try ... except
Anweisung hat eine optionaleelse
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.
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/
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.
"Ausnahmen in der else-Klausel werden von den vorhergehenden except-Klauseln nicht behandelt." Das ist der nützliche Teil. Ich danke Ihnen.
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.
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 intry/else
yfor/else
Ich habe es mehrmals mit dem Begriffnoexcept
ynobreak
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, einecontinue
obreak
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).0 Stimmen
Es ist besser, sie zu nennen
except-else
anstelle vontry-else
.