diff --git a/_pytest/python_api.py b/_pytest/python_api.py index 541371449..3dce7f6b4 100644 --- a/_pytest/python_api.py +++ b/_pytest/python_api.py @@ -2,7 +2,8 @@ import math import sys import py -from six.moves import zip +from six.moves import zip, filterfalse +from more_itertools.more import always_iterable from _pytest.compat import isclass from _pytest.outcomes import fail @@ -566,14 +567,10 @@ def raises(expected_exception, *args, **kwargs): """ __tracebackhide__ = True - msg = ("exceptions must be old-style classes or" - " derived from BaseException, not %s") - if isinstance(expected_exception, tuple): - for exc in expected_exception: - if not isclass(exc): - raise TypeError(msg % type(exc)) - elif not isclass(expected_exception): - raise TypeError(msg % type(expected_exception)) + for exc in filterfalse(isclass, always_iterable(expected_exception)): + msg = ("exceptions must be old-style classes or" + " derived from BaseException, not %s") + raise TypeError(msg % type(exc)) message = "DID NOT RAISE {0}".format(expected_exception) match_expr = None diff --git a/changelog/3265.trivial.rst b/changelog/3265.trivial.rst new file mode 100644 index 000000000..b4ad22ecf --- /dev/null +++ b/changelog/3265.trivial.rst @@ -0,0 +1 @@ +``pytest`` now depends on the `more_itertools `_ package. diff --git a/setup.py b/setup.py index 78b3ebc5e..1cbabd72e 100644 --- a/setup.py +++ b/setup.py @@ -60,6 +60,7 @@ def main(): 'six>=1.10.0', 'setuptools', 'attrs>=17.4.0', + 'more_itertools>=4.0.0', ] # if _PYTEST_SETUP_SKIP_PLUGGY_DEP is set, skip installing pluggy; # used by tox.ini to test with pluggy master