2012-10-01 9 views
11

Czy istnieje jeszcze napisać kod catch wyjątku, który jest zgodny z Pythona 2.4 do Pythona 3?Jak napisać kod przechwytywania wyjątków działa w Python2.4 do Python3

jak ten kod:

# only works in python 2.4 to 2.7 
try: 
    pass 
except Exception,e: 
    print(e) 

# only works in python 2.6 to 3.3 
try: 
    pass 
except Exception as e: 
    print(e) 
+1

Wiele projektów utrzymać swój kod dla Pythona 2 i użyj [2to3] (http : //docs.python.org/library/2to3.html), aby automatycznie przekonwertować go na pythona 3 w razie potrzeby. Zwykle jest to łatwiejsze niż próba napisania kodu zgodnego z obydwoma (prawdopodobnie nie będzie to najtrudniejszy problem, jaki napotkasz). – James

Odpowiedz

15

próbuje pisać kod, który działa zarówno w Pythonie Python 2 i 3 jest ostatecznie raczej bezcelowe, ponieważ na samą liczbę różnic między nimi. W rzeczywistości wiele projektów jest teraz obsługiwanych w oddzielnych wersjach Python 2 i Python 3.

Powiedział, że jeśli piekło gięte na robienie tego w super przenośny sposób ...

import sys 
try: 
    ... 
except Exception: 
    t, e = sys.exc_info()[:2] 
    print(e) 
+2

Chociaż nie będzie to bezpieczne dla wątków –

+0

Dziękuję za odpowiedź nneonneo i dziękuję @gnibbler za wskazówkę :-) – yegle

+4

@gnibbler: Wierzę, że jest ... "Zwrócone informacje są specyficzne dla bieżącego wątku i do bieżącej ramki stosu. " – nneonneo

Powiązane problemy