This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author clevy
Recipients clevy, rhettinger, stutzbach
Date 2015-06-11.19:20:50
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1434050451.28.0.415875303865.issue24434@psf.upfronthosting.co.za>
In-reply-to
Content
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.
History
Date User Action Args
2015-06-11 19:20:51clevysetrecipients: + clevy, rhettinger, stutzbach
2015-06-11 19:20:51clevysetmessageid: <1434050451.28.0.415875303865.issue24434@psf.upfronthosting.co.za>
2015-06-11 19:20:51clevylinkissue24434 messages
2015-06-11 19:20:51clevycreate