2009-09-03 14 views
8

Ich habe folgenden Python-Code:macht Python 2.6 Ausnahme rückwärtskompatibel

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

Dies funktioniert unter Python 2.6, aber die "als e" Syntax nicht unter früheren Versionen. Wie kann ich das lösen? Oder mit anderen Worten, wie fange ich benutzerdefinierte Ausnahmen (und ihre Instanzvariablen) unter Python 2.6. Vielen Dank!

Antwort

9

Dies ist abwärtskompatibel:

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

Siehe PEP 3110 für warum dies geändert: http://www.python.org/dev/peps/pep-3110/ – Greg

+1

Die Syntax ist sicherlich abwärtskompatibel, aber es ist auch nicht _forward_ kompatibel. Dies ist in Python 3 ungültig und führt zu einem Syntaxfehler. Yup, es ist kein Laufzeitfehler, aber ein Kompilierzeitfehler, der nicht abgefangen werden kann. Siehe http://docs.python.org/library/sys.html#sys.exc_info und @ Mario-Ruggier's Antwort unten – Nathan

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

Dies ist sowohl vorwärts- und rückwärtskompatible:

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

Dies wird von dem rid Mehrdeutigkeitsproblem in Python 2.5 und früher, während man immer noch keinen der Vorteile der Python 2.6/3 Variante verliert, dh immer noch eindeutig mehrere Ausnahmearten fangen kann, z except (ConfigurationException, AnotherExceptionType): und, wenn pro-Typ-Behandlung benötigt wird, kann immer noch für exc_info()[0]==AnotherExceptionType testen.