Message245182
The current implementation ItemsView.__contains__ reads
class ItemsView(MappingView, Set):
...
def __contains__(self, item):
key, value = item
try:
v = self._mapping[key]
except KeyError:
return False
else:
return v == value
...
This poses several problems. First, any non-iterable or iterable not having exactly two elements will raise an error instead of returning false.
Second, an ItemsView object is roughly the same as a set of tuple-pairs hashed by the first element. Thus, for example,
["a", 1] in d.items()
will return False for any dict d, yet in the current ItemsView implementation, this is True.
The patch changes behavior to immediately return false for non-tuple items and tuples not of length 2, avoiding unnecessary exceptions. It also adds tests to collections which fail under the old behavior and pass with the update. |
|
Date |
User |
Action |
Args |
2015-06-11 19:20:51 | clevy | set | recipients:
+ clevy, rhettinger, stutzbach |
2015-06-11 19:20:51 | clevy | set | messageid: <1434050451.28.0.415875303865.issue24434@psf.upfronthosting.co.za> |
2015-06-11 19:20:51 | clevy | link | issue24434 messages |
2015-06-11 19:20:51 | clevy | create | |
|