Quelle est la différence entre ',' et 'comme' dans les énoncés sauf, par exemple:
try:
pass
except Exception, exception:
pass
et:
try:
pass
except Exception as exception:
pass
La deuxième syntaxe est-elle légale en 2.6? Cela fonctionne dans CPython 2.6 sur Windows mais l'interpréteur 2.5 de cygwin se plaint de son invalidité.
Si elles sont toutes deux valides en 2.6, que dois-je utiliser?
Le document définitif est PEP-3110: Catching Exceptions
Sommaire:
as
est nécessaire pour affecter une exception à une variable.as
, car elle est beaucoup moins ambiguë et compatible en aval avec Python 3.x.as
n'est pas pris en charge.Oui c'est légal. J'utilise Python 2.6
try:
[] + 3
except Exception as x:
print "woo hoo"
>>>
woo hoo
Mise à jour : Il existe une autre raison d'utiliser la syntaxe as
. En utilisant ,
rend les choses beaucoup plus ambiguës, comme l'ont souligné d'autres personnes; et voici ce qui fait la différence. A partir de Python 2.6, il existe multicatch
qui vous permet de intercepter plusieurs exceptions dans un bloc except
bloc . Dans une telle situation , c'est plus expressif et pythonique à dire
except (exception1, exception2) as e
plutôt que de dire
except (exception1, exception2), e
qui fonctionnerait encore
la syntaxe "en tant que" est la syntaxe préférée à l'avenir, cependant si votre code doit fonctionner avec des versions plus anciennes Python (2.6 est la première à prendre en charge la nouvelle)), vous devrez alors utiliser la syntaxe par virgule.
Si vous voulez supporter 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 )
A partir de Python 3.7 (pas sûr des autres versions), la syntaxe 'virgule' n'est plus supportée:
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