web-dev-qa-db-ja.com

Python 2.5-Python 3.xのエラーとして...を除いて...を試してください

Python 2.5、2.7、および3.2の両方で例外のエラー値を保持して使用したい。

Python 2.5および2.7(ただし3.xではない))では、次のように機能します。

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

Python 2.7および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の両方で機能するこの目的のコードはありますか?

ありがとう

26
superkoning

Python 2.5から3.2で1つのコードベースを使用できますが、簡単ではありません。 coverage.py をご覧ください。これは、単一のコードベースで2.3から3.3で実行されます。

例外をキャッチして、それらすべてで機能する例外への参照を取得する方法は次のとおりです。

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

これは次と同等です。

except ValueError as err:
    #.. use err...
38
Ned Batchelder