2009-09-03 12 views
8

Mam następujący kod Pythona:podejmowania Pythona 2.6 wyjątek wstecznie kompatybilny

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

Działa pod Pythona 2.6, ale „jako e” składnia nie w poprzednich wersjach. Jak mogę to rozwiązać? Lub innymi słowy, w jaki sposób można złapać zdefiniowanych przez użytkownika wyjątków (i używać ich zmiennych instancji) w python 2.6. Dziękuję Ci!

Odpowiedz

9

To jest wstecznie kompatybilny:

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

Zobacz, dlaczego ta zmiana uległa zmianie: Zobacz artykuł PEP 3110: http://www.python.org/dev/peps/pep-3110/ – Greg

+1

Składnia jest z pewnością kompatybilna wstecz, ale nie jest również zgodna z _forward_. Jest to nieprawidłowe w Pythonie 3 i powoduje błąd składni. Tak, to nie jest błąd środowiska wykonawczego, ale błąd kompilacji, którego nie można przechwycić. Zobacz odpowiedź http://docs.python.org/library/sys.html#sys.exc_info i @ Mario-Ruggier poniżej – Nathan

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

Jest to zarówno w przód iw tył kompatybilne:

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

ten pozbywa się problem niejednoznaczności w pythonie 2.5 i wcześniejszych, wciąż nie tracąc żadnej z zalet wersji Pythona 2.6/3, tzn. nadal jednoznacznie wychwytuje wiele typów wyjątków, np. except (ConfigurationException, AnotherExceptionType): i, jeśli potrzebne jest zarządzanie typami, nadal można przetestować pod kątem exc_info()[0]==AnotherExceptionType.

Powiązane problemy