В Python 3.2, unittest.assertRaisesRegexp
было переименовано в unittest.assertRaisesRegex
. Как я могу вызвать эту функцию, сохраняя при этом существующий синтаксис, из кода, который должен поддерживать как Python 2, так и 3? Я бы предпочел не менять вызовы типа self.assertRaisesRegexp('ValueError', 'foo')
на вызовы myAssertRaisesRegex(self, 'ValueError', 'foo')
. Мой любимый подход - использовать имя Python 3, так как в итоге мы откажемся от поддержки Python 2. Как второй, я в порядке с использованием синтаксиса, подобного self.assertRaisesRegexSpecial('ValueError', 'foo')
- другими словами, придумывая собственное имя, которое будет работать как с Python 2, так и с 3, не требуя изменения синтаксиса.
Функция является методом класса, поэтому я не могу следовать шаблону того, что обычно делается для range
/ xrange
:
try:
xrange
except NameError:
range = xrange
# Now range can be used from this point on in the code.
Ни, насколько я могу судить Могу ли я изменить класс. Я знаю, как определить, существует ли unittest.assertRaisesRegex
в используемой версии Python, а именно:
hasattr(unittest.TestCase, 'assertRaisesRegexp')
Как правильно добавить атрибут в существующий unittest, который отображается на assertRaisesRegexp
для Python 2, но на assertRaisesRegex
для Python 3?