[pypy-commit] pypy py3k: cpython issue13188: generators now use value.__traceback__ when no traceback
pjenvey
noreply at buildbot.pypy.org
Sat Feb 23 23:20:51 CET 2013
Author: Philip Jenvey <pjenvey at underboss.org>
Branch: py3k
Changeset: r61711:9d6e4fcf6f60
Date: 2013-02-23 14:19 -0800
http://bitbucket.org/pypy/pypy/changeset/9d6e4fcf6f60/
Log: cpython issue13188: generators now use value.__traceback__ when no
traceback was specified
diff --git a/pypy/interpreter/generator.py b/pypy/interpreter/generator.py
--- a/pypy/interpreter/generator.py
+++ b/pypy/interpreter/generator.py
@@ -107,6 +107,11 @@
operr = OperationError(w_type, w_val, tb)
operr.normalize_exception(space)
+ if tb is None:
+ tb = space.getattr(operr.get_w_value(space),
+ space.wrap('__traceback__'))
+ if not space.is_w(tb, space.w_None):
+ operr.set_traceback(tb)
return self.send_ex(space.w_None, operr)
def descr_next(self):
diff --git a/pypy/interpreter/test/test_generator.py b/pypy/interpreter/test/test_generator.py
--- a/pypy/interpreter/test/test_generator.py
+++ b/pypy/interpreter/test/test_generator.py
@@ -163,6 +163,26 @@
raises(StopIteration, next, g)
raises(NameError, g.throw, NameError)
+ def test_throw_tb(self):
+ def f():
+ try:
+ yield
+ except:
+ raise
+ g = f()
+ try:
+ 1/0
+ except ZeroDivisionError as v:
+ try:
+ g.throw(v)
+ except Exception as w:
+ tb = w.__traceback__
+ levels = 0
+ while tb:
+ levels += 1
+ tb = tb.tb_next
+ assert levels == 3
+
def test_close(self):
def f():
yield 1
More information about the pypy-commit
mailing list