From f07618a5efe5bafcc7accf11e809226ee2f478b0 Mon Sep 17 00:00:00 2001 From: hauntsaninja Date: Wed, 6 Mar 2024 14:25:00 -0800 Subject: [PATCH 1/4] gh-116436: Improve error message when TypeError occurs during dict update --- Lib/test/test_dict.py | 25 +++++++++++++++++++++++++ Objects/dictobject.c | 9 +++++---- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/Lib/test/test_dict.py b/Lib/test/test_dict.py index 620d0ca4f4c2da..0cc56ff75a4188 100644 --- a/Lib/test/test_dict.py +++ b/Lib/test/test_dict.py @@ -265,6 +265,31 @@ def __next__(self): self.assertRaises(ValueError, {}.update, [(1, 2, 3)]) + def test_update_type_error(self): + with self.assertRaises(TypeError) as cm: + {}.update([object() for _ in range(3)]) + + self.assertEqual(str(cm.exception), "object is not iterable") + self.assertEqual( + cm.exception.__notes__, + ['Cannot convert dictionary update sequence element #0 to a sequence'], + ) + + def badgen(): + yield "key" + raise TypeError("oops") + yield "value" + + with self.assertRaises(TypeError) as cm: + dict([badgen() for _ in range(3)]) + + self.assertEqual(str(cm.exception), "oops") + self.assertEqual( + cm.exception.__notes__, + ['Cannot convert dictionary update sequence element #0 to a sequence'], + ) + + def test_fromkeys(self): self.assertEqual(dict.fromkeys('abc'), {'a':None, 'b':None, 'c':None}) d = {} diff --git a/Objects/dictobject.c b/Objects/dictobject.c index 9b8fc4a958f7ad..72760190031159 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -3515,13 +3515,14 @@ merge_from_seq2_lock_held(PyObject *d, PyObject *seq2, int override) } /* Convert item to sequence, and verify length 2. */ - fast = PySequence_Fast(item, ""); + fast = PySequence_Fast(item, "object is not iterable"); if (fast == NULL) { - if (PyErr_ExceptionMatches(PyExc_TypeError)) - PyErr_Format(PyExc_TypeError, - "cannot convert dictionary update " + if (PyErr_ExceptionMatches(PyExc_TypeError)) { + _PyErr_FormatNote( + "Cannot convert dictionary update " "sequence element #%zd to a sequence", i); + } goto Fail; } n = PySequence_Fast_GET_SIZE(fast); From 0884054a9bbb951e76a90062144ba55c7061eac7 Mon Sep 17 00:00:00 2001 From: "blurb-it[bot]" <43283697+blurb-it[bot]@users.noreply.github.com> Date: Wed, 6 Mar 2024 22:33:36 +0000 Subject: [PATCH 2/4] =?UTF-8?q?=F0=9F=93=9C=F0=9F=A4=96=20Added=20by=20blu?= =?UTF-8?q?rb=5Fit.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2024-03-06-22-33-33.gh-issue-116436.y8Thkt.rst | 1 + 1 file changed, 1 insertion(+) create mode 100644 Misc/NEWS.d/next/Core and Builtins/2024-03-06-22-33-33.gh-issue-116436.y8Thkt.rst diff --git a/Misc/NEWS.d/next/Core and Builtins/2024-03-06-22-33-33.gh-issue-116436.y8Thkt.rst b/Misc/NEWS.d/next/Core and Builtins/2024-03-06-22-33-33.gh-issue-116436.y8Thkt.rst new file mode 100644 index 00000000000000..f9c3ab1f0a5ab8 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2024-03-06-22-33-33.gh-issue-116436.y8Thkt.rst @@ -0,0 +1 @@ +Improve error message when :exc:`TypeError` occurs during :meth:`dict.update` From 164e02e8eacc759063f5a9f9e835644ecd58bf83 Mon Sep 17 00:00:00 2001 From: hauntsaninja Date: Sun, 6 Apr 2025 14:50:16 -0700 Subject: [PATCH 3/4] . --- .../2024-03-06-22-33-33.gh-issue-116436.y8Thkt.rst } | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Misc/NEWS.d/next/{Core and Builtins/2024-03-06-22-33-33.gh-issue-116436.y8Thkt.rst => Core_and_Builtins/2024-03-06-22-33-33.gh-issue-116436.y8Thkt.rst } (100%) diff --git a/Misc/NEWS.d/next/Core and Builtins/2024-03-06-22-33-33.gh-issue-116436.y8Thkt.rst b/Misc/NEWS.d/next/Core_and_Builtins/2024-03-06-22-33-33.gh-issue-116436.y8Thkt.rst similarity index 100% rename from Misc/NEWS.d/next/Core and Builtins/2024-03-06-22-33-33.gh-issue-116436.y8Thkt.rst rename to Misc/NEWS.d/next/Core_and_Builtins/2024-03-06-22-33-33.gh-issue-116436.y8Thkt.rst From df927161ad6348ef921ef5dfef9f20c5ec68101a Mon Sep 17 00:00:00 2001 From: Shantanu Jain Date: Fri, 18 Apr 2025 19:05:34 -0700 Subject: [PATCH 4/4] . --- ...y8Thkt.rst => 2024-03-06-22-33-33.gh-issue-116436.y8Thkt.rst} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Misc/NEWS.d/next/Core_and_Builtins/{2024-03-06-22-33-33.gh-issue-116436.y8Thkt.rst => 2024-03-06-22-33-33.gh-issue-116436.y8Thkt.rst} (100%) diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2024-03-06-22-33-33.gh-issue-116436.y8Thkt.rst b/Misc/NEWS.d/next/Core_and_Builtins/2024-03-06-22-33-33.gh-issue-116436.y8Thkt.rst similarity index 100% rename from Misc/NEWS.d/next/Core_and_Builtins/2024-03-06-22-33-33.gh-issue-116436.y8Thkt.rst rename to Misc/NEWS.d/next/Core_and_Builtins/2024-03-06-22-33-33.gh-issue-116436.y8Thkt.rst