4

我有一个应用程序,它需要在所有“现代”Python 版本中运行,这意味着2.5- 3.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 回答