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 <rep...@bugs.python.org> <http://bugs.python.org/issue18533> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com