Was ist der Unterschied zwischen ',' und 'as' in Ausnahmen, z. B.:
try:
pass
except Exception, exception:
pass
und:
try:
pass
except Exception as exception:
pass
Ist die zweite Syntax in 2.6 zulässig? Es funktioniert in CPython 2.6 unter Windows, aber der 2.5-Interpreter in Cygwin beschwert sich, dass es ungültig ist.
Wenn beide in 2.6 gültig sind, welche soll ich verwenden?
python
python-2.6
Peter Graham
quelle
quelle
as
ist die einzige Möglichkeit, die Ausnahme einem lokalen in Python 3.x zuzuweisen. Ist aberas
nicht erforderlich , da Sie es nicht angeben müssen, wenn Sie es überhaupt nicht benötigen.Ja, es ist legal. Ich verwende Python 2.6
Update : Es gibt noch einen weiteren Grund, die
as
Syntax zu verwenden. Das Verwenden,
macht die Dinge viel mehrdeutiger, wie andere betont haben; und hier ist, was den Unterschied macht. Ab Python 2.6multicatch
können Sie mehrere Ausnahmen in einemexcept
Block abfangen . In einer solchen Situation ist es ausdrucksvoller und pythonischer zu sagenanstatt zu sagen
das würde noch funktionieren
quelle
except NameError, ValueError:
dann fragen, warum dieValueError
Ausnahme nie abgefangen wurde. Oder gebrauchtexcept (NameError, e):
und wurden mit einemNameError
für'e'
!Die "as" -Syntax ist in Zukunft die bevorzugte. Wenn Ihr Code jedoch mit älteren Python-Versionen funktionieren muss (2.6 unterstützt als erster die neue), müssen Sie die Kommasyntax verwenden.
quelle
Wenn Sie alle Python-Versionen unterstützen möchten, können Sie die folgende
sys.exc_info()
Funktion verwenden:(Quelle: http://python3porting.com/noconv.html )
quelle
as
Ziel (zusammen mit den restlichen Ausnahmeinformationen) implizit festgelegt,del
sobald Sie denexcept
Block verlassen (dies verhindert, dass einige zyklische Referenzen, die am gespeicherten Traceback beteiligt sind, die Freigabe des Speichers verzögern, bis der zyklische GC ausgeführt wird ). Dieser äquivalente Code ist also etwas weniger äquivalent, es sei denn, Sie verwenden atry/finally
innerhalb desexcept
Blocks, um sicherzustellen, dass er ausgeführtdel e
wird, bevor Sie denexcept
Block verlassen.Ab Python 3.7 (bei anderen Versionen nicht sicher) wird die Kommasyntax nicht mehr unterstützt:
Quelldatei
exception_comma.py
:$ python --version --> Python 2.7.10
$ python3 --version --> Python 3.7.2
quelle