Question

J'ai le code python suivant:

 try:
      pr.update()
 except ConfigurationException as e:
      returnString=e.line+' '+e.errormsg

Cela fonctionne sous Python 2.6, mais la syntaxe « comme e » échoue dans les versions précédentes. Comment puis-je résoudre cela? En d'autres termes, comment puis-je intercepter des exceptions définies par l'utilisateur (et utiliser leurs variables d'instance) sous Python 2.6. Merci!

Était-ce utile?

La solution

Ceci est rétrocompatible:

try:
    pr.update()
except ConfigurationException, e:
    returnString=e.line+' '+e.errormsg

Autres conseils

est à la fois compatibilité ascendante et descendante:

import sys
try:
    pr.update()
except (ConfigurationException,):
    e = sys.exc_info()[1]
    returnString = "%s %s" % (e.line, e.errormsg)

Cela se débarrasse du problème d'ambiguïté dans Python 2.5 et versions antérieures, tout en ne perdant aucun des avantages du python 2.6 / 3 variation peut dire encore attraper sans ambiguïté plusieurs types d'exception par exemple except (ConfigurationException, AnotherExceptionType): et, si le traitement par type est nécessaire, peut encore tester exc_info()[0]==AnotherExceptionType.

Lire ceci: http://docs.python.org/reference /compound_stmts.html#the-try-statement

et ceci: http: //docs.python .org / whatsnew / 2.6.html # pep-3110-traitement des exceptions -modifications

Ne pas utiliser as, utilisez un ,.

La syntaxe de as est pas spécifiquement rétrocompatible car la syntaxe de , est ambigu et doit aller en Python 3.

try:
    pr.update()
except ConfigurationException, e:
    returnString = e.line + " " + e.errormsg
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top