Python try ... except vs virgule 'comme' à l'exception
-
22-09-2019 - |
Question
Quelle est la différence entre « » et « comme » à l'exception des déclarations, par exemple:
try:
pass
except Exception, exception:
pass
et
try:
pass
except Exception as exception:
pass
La deuxième syntaxe juridique 2.6? Il fonctionne CPython 2.6 sur Windows, mais l'interprète 2.5 dans Cygwin se plaint qu'il est invalide.
Si elles sont valides 2.6 qui dois-je utiliser?
La solution
Le document définitif est PEP-3110: Attraper les exceptions
Résumé:
- Dans 3.x Python, en utilisant
as
est requis pour attribuer une exception à une variable. - En Python 2.6+, utilisez la syntaxe
as
, car il est beaucoup moins ambigu et vers l'avant compatible avec Python 3.x. - En Python 2.5 et versions antérieures, utilisez la version virgule, puisque
as
n'est pas pris en charge.
Autres conseils
Oui, c'est légal. Je suis en Python 2.6
try:
[] + 3
except Exception as x:
print "woo hoo"
>>>
woo hoo
Mise à jour : Il y a une autre raison d'utiliser la syntaxe as
. L'utilisation ,
rend les choses beaucoup plus ambigu, comme d'autres l'ont souligné; et voici ce qui fait la différence. A partir de Python 2.6, il y a multicatch
qui vous permet de plusieurs exceptions une bloc de except
. Dans une telle situation, il est plus expressif et pythonique dire
except (exception1, exception2) as e
plutôt que de dire
except (exception1, exception2), e
qui fonctionne toujours
« comme » la syntaxe est celui préféré aller de l'avant, si votre code doit fonctionner avec les versions de Python anciens (2.6 est le premier à soutenir la nouvelle), alors vous aurez besoin d'utiliser la syntaxe par des virgules.
Si vous voulez soutenir toutes les versions de python, vous pouvez utiliser la fonction sys.exc_info()
comme ceci:
try:
a = 1/'0'
except (ZeroDivisionError, TypeError):
e = sys.exc_info()[1]
print(e.args[0])
(source: http://python3porting.com/noconv.html )
de Python 3.7 (pas sûr d'autres versions) la syntaxe « virgule » est pas pris en charge plus:
Fichier source exception_comma.py
:
try:
result = 1/0
except Exception, e:
print("An error occurred")
exit(1)
exit(0)
-
$ python --version --> Python 2.7.10
$ python exception_comma.py
An error occurred
-
$ python3 --version --> Python 3.7.2
$ python3 exception_comma.py
File "exception_comma.py", line 3
except Exception, e:
^
SyntaxError: invalid syntax