PEP 341 – Vereinheitlichung von try-except und try-finally
- Autor:
- Georg Brandl <georg at python.org>
- Status:
- Final
- Typ:
- Standards Track
- Erstellt:
- 04-Mai-2005
- Python-Version:
- 2.5
- Post-History:
Zusammenfassung
Dieses PEP schlägt eine Änderung der Syntax und Semantik von try-Anweisungen vor, um kombinierte try-except-finally-Blöcke zu ermöglichen. Das bedeutet kurz gesagt, dass es gültig wäre zu schreiben
try:
<do something>
except Exception:
<handle the error>
finally:
<cleanup>
Rationale/Vorschlag
Es gibt viele Anwendungsfälle für die try-except-Anweisung und die try-finally-Anweisung per se; jedoch muss man oft Ausnahmen abfangen und danach einige Bereinigungsarbeiten ausführen. Es ist etwas ärgerlich und nicht sehr verständlich, dass man schreiben muss
f = None
try:
try:
f = open(filename)
text = f.read()
except IOError:
print 'An error occurred'
finally:
if f:
f.close()
Daher wird vorgeschlagen, dass eine Konstruktion wie diese
try:
<suite 1>
except Ex1:
<suite 2>
<more except: clauses>
else:
<suite 3>
finally:
<suite 4>
genau dasselbe ist wie die Legacy
try:
try:
<suite 1>
except Ex1:
<suite 2>
<more except: clauses>
else:
<suite 3>
finally:
<suite 4>
Dies ist abwärtskompatibel, und jede heute legale try-Anweisung würde weiterhin funktionieren.
Änderungen an der Grammatik
Die Grammatik für die try-Anweisung, die derzeit
try_stmt: ('try' ':' suite (except_clause ':' suite)+
['else' ':' suite] | 'try' ':' suite 'finally' ':' suite)
müsste werden
try_stmt: 'try' ':' suite
(
(except_clause ':' suite)+
['else' ':' suite]
['finally' ':' suite]
|
'finally' ':' suite
)
Implementierung
Da der PEP-Autor derzeit nicht über ausreichende Kenntnisse der CPython-Implementierung verfügt, kann er leider keine liefern. Thomas Lee hat einen Patch eingereicht [2].
Laut Guido sollte dies jedoch ein Kinderspiel sein, es zu implementieren [1] – zumindest für einen Core-Hacker.
Dieser Patch wurde am 17. Dezember 2005, SVN-Revision 41740, committet [3].
Referenzen
Urheberrecht
Dieses Dokument wurde gemeinfrei erklärt.
Quelle: https://github.com/python/peps/blob/main/peps/pep-0341.rst
Zuletzt geändert: 2025-02-01 08:59:27 GMT