我可以包装python对象来捕获异常吗?

时间:2018-02-09 15:43:33

标签: python-3.x bravado

我想一般地包装一个对象以捕获所有方法的异常。

假设我有这门课程:

class CanThrowException:
    def not1(self, param):
        if param == 1:
            raise ValueError('Parameter value cannot be 1')

        return "Your parameter is {}".format(param)

    def not2(self, param):
        if param == 2:
            raise ValueError('Parameter value cannot be 2')

        return "Your parameter is {}".format(param)

我想包装对象来捕获异常,但是没有创建一个定义CanThrowException类中存在的所有方法的类。有没有办法在python中做到这一点?

我正在使用python bravado来解析REST API定义并对API执行测试。在API的正常使用中,如果端点返回与http代码2xx不同的内容,则调用失败。这就是为什么在这些情况下,虚张声势会引发异常。但在我的情况下,我在测试API时会导致这些错误,因此在这种情况下,它们不是错误。

这就是为什么我想隔离使用虚张声势,管理异常(as recommended by the bravado team)并返回我的测试需要知道的内容。

提前致谢!

1 个答案:

答案 0 :(得分:0)

你有没有考虑过这样的事情?

class Wrapper:
    def __init__(self, obj):
        self.obj = obj

    def __getattr__(self, item):
        prop = getattr(self.obj, item)
        if callable(prop):
            def unraisable(*args, **kwargs):
                try:
                    return prop(*args, **kwargs)
                except Exception:
                    return None

            return unraisable

        return prop

instance = Wrapper(CanThrowException())
instance.not1(1)  # returns None
instance.not1(2)  # returns 'Your parameter is 2'