2012-07-01 6 views
24

&はPython 2.5,2.7,2.3の両方で例外のエラー値を使用します。 Pythonの2.5および2.7(ただし、3.xのない)、この作品でtry ... except ... Python 2.5のエラーとして - Python 3.x

のPython 2.7では
try: 
    print(10 * (1/0)) 
except ZeroDivisionError, error:  # old skool 
    print("Yep, error caught:", error) 

および3.2(ただし2.5で)、この作品:

try: 
    print(10 * (1/0)) 
except (ZeroDivisionError) as error: # 'as' is needed by Python 3 
    print("Yep, error caught:", error) 

です2.5、2.7、および3.2の両方で動作するこの目的のコードはありますか?

おかげ

+0

あなたが2.5をアップグレードすることはできません:

except ValueError: _, err, _ = sys.exc_info() #.. use err... 

これは同等です:

例外をキャッチし、それらのすべてで動作例外への参照を取得する方法はこれですコードを少なくとも2.7、好ましくは3? – Ben

+0

'(ZeroDivisionError)をエラーとして除外:' Python 2.7でうまく動作します。http://ideone.com/KfHBs –

+2

Python 3は明示的に下位互換性がありません。両方の言語でサポートされている構文の限定されたサブセットに制限するのはなぜですか? – Cameron

答えて

36

あなたは3.2を通じてニシキヘビ2.5上の一つのコードベースを使用することができますが、それは簡単ではありません。 coverage.pyを見ることができます。coverage.pyは、2.3から3.3まで、単一のコードベースで動作します。

except ValueError as err: 
    #.. use err... 
+0

が動作します!ありがとうございました! – user1492917

+1

それは動作しますが、おそらく治癒は問題よりも悪いです(醜い)。もう1つの方法は、2.5のコードをパッケージ化するときに "as"とコード変換スクリプトを使用することです。 YMMV。 –

+0

問題は、Pythonがバージョン間で構文の重要で不必要な変更を行うことです。これをCで想像してください:バージョンx.yから "{" :)の代わりに "@"を使用します。これは普通のばかげていて、治療法ははるかに優れています。 – Terminus

関連する問題