Использование функции в с

#python #with-statement

Вопрос:

Класс Python unittest.Testcase имеет ряд функций проверки, включая ту, которая проверяет, было ли выдвинуто утверждение:

 311 -    def assertRaises(self, excClass, callableObj, *args, **kwargs): 
319          try: 
320              callableObj(*args, **kwargs) 
321          except excClass: 
322              return 
323          else: 
324              if hasattr(excClass,'__name__'): excName = excClass.__name__ 
325              else: excName = str(excClass) 
326              raise self.failureException, "%s not raised" % excName 
 

Пользователь расширяет TestCase и использует вышеуказанное следующим образом:

 with self.AssertRaises(ValueError):
   x = 5/"3"
 

И вы поднимаете ошибку, если вы не поднимаете ValueError

Я хотел бы извлечь эту функцию TestCase и использовать ее в своем тестовом сценарии таким же образом, но я не знаю, как заставить assertRaises функцию работать в with инструкции.

Как можно осуществить эту трансформацию? Я не вижу в TestCase исходном коде ничего, что устанавливало бы контекст. Нет никаких __enter__ __exit__ функций или и TestCase ничего не расширяет.

Комментарии:

1. Вы смотрите не на тот исходный код. Смотрите здесь: github.com/python/cpython/blob/…