[Python-Dev] Avoiding error from repr() of recursive dictview

Gregory P. Smith greg at krypto.org
Tue Jul 23 00:01:38 CEST 2013


On Mon, Jul 22, 2013 at 2:44 PM, Ben North <ben at redfrontdoor.org> wrote:

> 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.).
>

Mailing lists are where patches go to get lost and die. :)  Post it on an
issue on bugs.python.org.  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)

-gps


>
> Thanks,
>
> Ben.
>
> _______________________________________________
> Python-Dev mailing list
> Python-Dev at python.org
> http://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe:
> http://mail.python.org/mailman/options/python-dev/greg%40krypto.org
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20130722/1ba4db5f/attachment.html>


More information about the Python-Dev mailing list