Author: Philip Jenvey <pjen...@underboss.org> Branch: stdlib-2.7.12 Changeset: r87509:0146779efba0 Date: 2016-10-01 14:15 -0700 http://bitbucket.org/pypy/pypy/changeset/0146779efba0/
Log: cpython issue4806: Avoid masking TypeError when *-unpacking a generator diff --git a/pypy/interpreter/argument.py b/pypy/interpreter/argument.py --- a/pypy/interpreter/argument.py +++ b/pypy/interpreter/argument.py @@ -85,9 +85,11 @@ try: args_w = space.fixedview(w_stararg) except OperationError as e: - if e.match(space, space.w_TypeError): + from pypy.interpreter.generator import GeneratorIterator + if (e.match(space, space.w_TypeError) and + not isinstance(w_stararg, GeneratorIterator)): raise oefmt(space.w_TypeError, - "argument after * must be a sequence, not %T", + "argument after * must be an iterable, not %T", w_stararg) raise self.arguments_w = self.arguments_w + args_w diff --git a/pypy/interpreter/test/test_argument.py b/pypy/interpreter/test/test_argument.py --- a/pypy/interpreter/test/test_argument.py +++ b/pypy/interpreter/test/test_argument.py @@ -613,7 +613,7 @@ Arguments(space, [], w_stararg=space.wrap(42)) except OperationError as e: msg = space.str_w(space.str(e.get_w_value(space))) - assert msg == "argument after * must be a sequence, not int" + assert msg == "argument after * must be an iterable, not int" else: assert 0, "did not raise" try: @@ -699,3 +699,15 @@ def f(**kwargs): return kwargs assert f(**globals()) == globals() + + def test_cpython_issue4806(self): + def broken(): + raise TypeError("myerror") + def g(*args): + pass + try: + g(*(broken() for i in range(1))) + except TypeError as e: + assert str(e) == "myerror" + else: + assert False, "Expected TypeError" _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit