4

すべての「最新の」Python バージョンで動作する必要があるアプリケーションがあり2.5ます3.2。2 つのコード ベースは必要2to3ないため、オプションではありません。

次のようなことを考えてみましょう:

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 では有効ではありません。

明らかに、例外オブジェクトを返すことができた可能性がありますが、これを行う必要がないことを願っています。

4

1 に答える 1

5

この懸念は、Py3kドキュメントで対処されています。解決策は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']
于 2012-05-13T01:37:40.400 に答える