We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent 5820f3a commit 6692f01Copy full SHA for 6692f01
2 files changed
Lib/test/test_dictviews.py
@@ -210,6 +210,32 @@ def test_copy(self):
210
self.assertRaises(TypeError, copy.copy, d.values())
211
self.assertRaises(TypeError, copy.copy, d.items())
212
213
+ def test_compare_error(self):
214
+ class Exc(Exception):
215
+ pass
216
+
217
+ class BadEq:
218
+ def __hash__(self):
219
+ return 7
220
+ def __eq__(self, other):
221
+ raise Exc
222
223
+ k1, k2 = BadEq(), BadEq()
224
+ v1, v2 = BadEq(), BadEq()
225
+ d = {k1: v1}
226
227
+ self.assertIn(k1, d)
228
+ self.assertIn(k1, d.keys())
229
+ self.assertIn(v1, d.values())
230
+ self.assertIn((k1, v1), d.items())
231
232
+ self.assertRaises(Exc, d.__contains__, k2)
233
+ self.assertRaises(Exc, d.keys().__contains__, k2)
234
+ self.assertRaises(Exc, d.items().__contains__, (k2, v1))
235
+ self.assertRaises(Exc, d.items().__contains__, (k1, v2))
236
+ with self.assertRaises(Exc):
237
+ v2 in d.values()
238
239
def test_pickle(self):
240
d = {1: 10, "a": "ABC"}
241
for proto in range(pickle.HIGHEST_PROTOCOL + 1):
Objects/dictobject.c
@@ -4035,7 +4035,7 @@ dictitems_contains(_PyDictViewObject *dv, PyObject *obj)
4035
return 0;
4036
key = PyTuple_GET_ITEM(obj, 0);
4037
value = PyTuple_GET_ITEM(obj, 1);
4038
- found = PyDict_GetItem((PyObject *)dv->dv_dict, key);
+ found = PyDict_GetItemWithError((PyObject *)dv->dv_dict, key);
4039
if (found == NULL) {
4040
if (PyErr_Occurred())
4041
return -1;
0 commit comments