[New-bugs-announce] [issue18533] Avoid error from repr() of recursive dictview
Ben North
report at bugs.python.org
Tue Jul 23 00:22:30 CEST 2013
New submission from Ben North:
#18019 noted the following crash in earlier 2.7:
>>> d={}
>>> d[42]=d.viewvalues()
>>> d
<segmentation fault>
This issue has been fixed; the behaviour now is that a RuntimeError is
produced for a recursive dictionary view:
>>> d={}
>>> d[42]=d.viewvalues()
>>> d # (output line-broken:)
{42: Traceback (most recent call last):
File "<stdin>", line 1, in <module>
RuntimeError: maximum recursion depth exceeded
while getting the repr of a list
Before finding this, though, I'd investigated and made a patch which
produces a similar "..." output to a recursive dictionary. Reworking
against current 2.7, the behaviour would be:
>>> x={}
>>> x[42]=x
>>> x # existing behaviour for dictionaries:
{42: {...}}
>>> d={}
>>> d[42]=d.viewvalues()
>>> d # new behaviour:
{42: dict_values([...])}
>>> d[43]=d.viewitems()
>>> d # (output line-broken:)
{42: dict_values([..., dict_items([(42, ...), (43, ...)])]),
43: dict_items([(42, dict_values([..., ...])), (43, ...)])}
Attached is the patch, against current 2.7 branch. If there is interest
in applying this, I will create a proper patch (changelog entry, fix to
Lib/test/test_dictviews.py, etc.).
On python-dev, Gregory Smith noted:
Given that the RuntimeError fix has been released, your proposed
... behavior is arguably a new feature so I'd only expect this to
make sense for consideration in 3.4, not 2.7. (if accepted at all)
[http://mail.python.org/pipermail/python-dev/2013-July/127489.html]
so I have marked for consideration for versions 2.7 and 3.4.
----------
components: Interpreter Core
files: non-error-recursive-dictview.patch
keywords: patch
messages: 193570
nosy: bennorth
priority: normal
severity: normal
status: open
title: Avoid error from repr() of recursive dictview
type: behavior
versions: Python 2.7, Python 3.4
Added file: http://bugs.python.org/file31019/non-error-recursive-dictview.patch
_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue18533>
_______________________________________
More information about the New-bugs-announce
mailing list