1

我想包装一个足够通用的对象以捕获所有方法的异常。

假设我有这个类:

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 不同的内容,则调用失败。这就是为什么 bravado 在这些情况下会引发异常。但就我而言,我在测试 API 时会导致这些错误,因此在这种情况下它们不是错误。

这就是为什么我想隔离 bravado 的使用,管理异常(按照 bravado 团队的建议)并返回我的测试需要知道的内容。

提前致谢!

4

1 回答 1

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'
于 2018-02-11T20:58:00.363 回答