我想一般地包装一个对象以捕获所有方法的异常。
假设我有这门课程:
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)并返回我的测试需要知道的内容。
提前致谢!
答案 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'