[pypy-commit] pypy stdlib-2.7.12: cpython issue4806: Avoid masking TypeError when *-unpacking a generator
pjenvey
pypy.commits at gmail.com
Sat Oct 1 17:29:19 EDT 2016
Author: Philip Jenvey <pjenvey at 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"
More information about the pypy-commit
mailing list