mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
#4069: aSet.remove(otherSet) would always report the empty frozenset([]) as the missing key.
Now it correctly refers to the initial otherSet. Backport of r66836.
This commit is contained in:
parent
001befaadc
commit
00c94edea0
3 changed files with 23 additions and 4 deletions
|
@ -382,6 +382,17 @@ class TestSet(TestJointOps):
|
||||||
else:
|
else:
|
||||||
self.fail()
|
self.fail()
|
||||||
|
|
||||||
|
def test_remove_keyerror_set(self):
|
||||||
|
key = self.thetype([3, 4])
|
||||||
|
try:
|
||||||
|
self.s.remove(key)
|
||||||
|
except KeyError as e:
|
||||||
|
self.assert_(e.args[0] is key,
|
||||||
|
"KeyError should be {0}, not {1}".format(key,
|
||||||
|
e.args[0]))
|
||||||
|
else:
|
||||||
|
self.fail()
|
||||||
|
|
||||||
def test_discard(self):
|
def test_discard(self):
|
||||||
self.s.discard('a')
|
self.s.discard('a')
|
||||||
self.assert_('a' not in self.s)
|
self.assert_('a' not in self.s)
|
||||||
|
|
|
@ -12,6 +12,11 @@ What's New in Python 2.6.1 alpha 1
|
||||||
Core and Builtins
|
Core and Builtins
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
- Issue #4069: When set.remove(element) is used with a set element, the element
|
||||||
|
is temporarily replaced with an equivalent frozenset. But the eventual
|
||||||
|
KeyError would always report the empty frozenset([]) as the missing key. Now
|
||||||
|
it correctly refers to the initial element.
|
||||||
|
|
||||||
- Fixed C99 style comments in several files. Python is now C89 compatible
|
- Fixed C99 style comments in several files. Python is now C89 compatible
|
||||||
again.
|
again.
|
||||||
|
|
||||||
|
|
|
@ -1874,7 +1874,7 @@ PyDoc_STRVAR(contains_doc, "x.__contains__(y) <==> y in x.");
|
||||||
static PyObject *
|
static PyObject *
|
||||||
set_remove(PySetObject *so, PyObject *key)
|
set_remove(PySetObject *so, PyObject *key)
|
||||||
{
|
{
|
||||||
PyObject *tmpkey, *result;
|
PyObject *tmpkey;
|
||||||
int rv;
|
int rv;
|
||||||
|
|
||||||
rv = set_discard_key(so, key);
|
rv = set_discard_key(so, key);
|
||||||
|
@ -1886,11 +1886,14 @@ set_remove(PySetObject *so, PyObject *key)
|
||||||
if (tmpkey == NULL)
|
if (tmpkey == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
set_swap_bodies((PySetObject *)tmpkey, (PySetObject *)key);
|
set_swap_bodies((PySetObject *)tmpkey, (PySetObject *)key);
|
||||||
result = set_remove(so, tmpkey);
|
rv = set_discard_key(so, tmpkey);
|
||||||
set_swap_bodies((PySetObject *)tmpkey, (PySetObject *)key);
|
set_swap_bodies((PySetObject *)tmpkey, (PySetObject *)key);
|
||||||
Py_DECREF(tmpkey);
|
Py_DECREF(tmpkey);
|
||||||
return result;
|
if (rv == -1)
|
||||||
} else if (rv == DISCARD_NOTFOUND) {
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rv == DISCARD_NOTFOUND) {
|
||||||
set_key_error(key);
|
set_key_error(key);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue