4

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