[Python-Dev] Avoiding error from repr() of recursive dictview
Ben North
ben at redfrontdoor.org
Mon Jul 22 23:44:28 CEST 2013
Hi,
A friend of mine, Ruadhan O'Flanagan, came across a bug which turned out
to be the one noted in [http://bugs.python.org/issue18019], i.e.:
>>> d={}
>>> d[42]=d.viewvalues()
>>> d
<segmentation fault>
This issue has been fixed in hg; 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.).
Thanks,
Ben.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: non-error-recursive-dictview.patch
Type: application/octet-stream
Size: 974 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/python-dev/attachments/20130722/1def81fd/attachment.obj>
More information about the Python-Dev
mailing list