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?

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top