Могу ли я обернуть объект python для перехвата исключений?
Я хотел бы обернуть объект достаточно универсально, чтобы поймать исключение во всех методах.
Предположим, у меня есть этот класс:
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, поэтому в этом контексте они не являются ошибками.
Вот почему я хотел бы изолировать использование бравады, управление исключением ( как рекомендовано командой бравады) и возвращение того, что нужно знать моим тестам.
Заранее спасибо!
1 ответ
Вы рассматривали что-то подобное?
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'