Python兼容性:捕获异常

4

我有一个应用程序,需要在所有“现代”Python版本中工作,这意味着2.5-3.2。我不想要两个代码库,因此2to3不是选项。

考虑类似于以下内容:

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

如何捕获异常并获取异常对象?

在Python 3中,except MyException, e:语法无效;在Python 2.5中,except MyException as e:语法也无效。

显然可以通过返回异常对象来实现,但我希望不必这样做。

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']

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接