Skip to content

Commit 6692f01

Browse files
committed
merge
1 parent 5820f3a commit 6692f01

2 files changed

Lines changed: 27 additions & 1 deletion

File tree

Lib/test/test_dictviews.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,32 @@ def test_copy(self):
210210
self.assertRaises(TypeError, copy.copy, d.values())
211211
self.assertRaises(TypeError, copy.copy, d.items())
212212

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+
213239
def test_pickle(self):
214240
d = {1: 10, "a": "ABC"}
215241
for proto in range(pickle.HIGHEST_PROTOCOL + 1):

Objects/dictobject.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4035,7 +4035,7 @@ dictitems_contains(_PyDictViewObject *dv, PyObject *obj)
40354035
return 0;
40364036
key = PyTuple_GET_ITEM(obj, 0);
40374037
value = PyTuple_GET_ITEM(obj, 1);
4038-
found = PyDict_GetItem((PyObject *)dv->dv_dict, key);
4038+
found = PyDict_GetItemWithError((PyObject *)dv->dv_dict, key);
40394039
if (found == NULL) {
40404040
if (PyErr_Occurred())
40414041
return -1;

0 commit comments

Comments
 (0)