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

Reply via email to