4

私はすべての "現代的な" Pythonバージョン、つまり2.5-3.2で動作する必要があるアプリケーションを持っています。 2つのコードベースが必要ないので、2to3はオプションではありません。どのように私は例外オブジェクトへのアクセスを取得するには、この例外をキャッチすることができPythonとの互換性:例外のキャッチ

def func(input): 
    if input != 'xyz': 
     raise MyException(some_function(input)) 
    return some_other_function(input) 

:?

はこのような何かを考えてみましょうか except MyException, e:はPython 3では無効で、except MyException as e:はpython 2.5では無効です。

明らかに例外オブジェクトを返すことは可能でしたが、私はこれを行う必要はありません。

答えて

5

この懸念はin the Py3k docsに対処されました。ソリューションは、sys.exc_info()を確認することです:

from __future__ import print_function 

try: 
    raise Exception() 
except Exception: 
    import sys 
    print(sys.exc_info()) # => (<type 'exceptions.Exception'>, Exception(), <traceback object at 0x101c39830>) 
    exc = sys.exc_info()[1] 
    print(type(exc)) # => <type 'exceptions.Exception'> 
    print([a for a in dir(exc) if not a.startswith('__')]) # => ['args', 'message']