unittest.TestCase.assertRaisesRegex throws DeprecationWarning

Peter Otten __peter__ at web.de
Tue Jul 31 18:56:53 EDT 2018

Uri Even-Chen wrote:

> Hi,
> We are using unittest.TestCase.assertRaisesRegex in our Django project
> (Speedy Net / Speedy Match - https://github.com/urievenchen/speedy-net),
> and I always prefer calling Python function parameters by name. So we call
> self.assertRaisesRegex with parameters (keyword arguments)
> expected_exception, expected_regex and callable - as documented on
> . You can see our code on
> https://github.com/urievenchen/speedy-net/blob/master/speedy/core/accounts/tests/test_models.py
> . When I run tests regularly (with "./manage.py test") they pass, But when
> I run tests with "python -W error::DeprecationWarning manage.py test",
> (with Python 3.5.5), I receive errors like this:
> DeprecationWarning: 'callable' is an invalid keyword argument for this
> function
> See the full errors here:
> https://travis-ci.org/urievenchen/speedy-net/jobs/410482655 (by the way,
> with Python 3.4.6 the tests pass).

No, the function to be tested is not run at all (it looks like callable was 
called callable_obj back then):

$ cat unittest_regex.py
import unittest

def foo(*args, **kw):
    print("RUNNING FOO")

class T(unittest.TestCase):
    def test_baz(self):

if __name__ == "__main__":
$ python3.4 unittest_regex.py
Ran 1 test in 0.000s


> Do you know what is the problem and why I receive these deprecation
> warnings?

Apparently they want you to use the context manager ;)

with self.assertRaisesRegex(ValueError, "bar"):

Clean, readable, robust -- but no keyword args.

More information about the Python-list mailing list