la prise python 2,6 exception rétrocompatible
-
21-09-2019 - |
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!
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