[New-bugs-announce] [issue30969] Docs should say that `x is z or x == z` is used for `x in y` in containers that do not implement `__contains__`

Antti Haapala report at bugs.python.org
Wed Jul 19 07:55:53 EDT 2017


New submission from Antti Haapala:

The doc reference/expressions.srt says that

> For user-defined classes which do not define __contains__() but do 
> define __iter__(), x in y is True if some value z with x == z is 
> produced while iterating over y. If an exception is raised during the 
> iteration, it is as if in raised that exception.

and

> Lastly, the old-style iteration protocol is tried: if a class defines 
> __getitem__(), x in y is True if and only if there is a non-negative 
> integer index i such that x == y[i], and all lower integer indices do 
> not raise IndexError exception. (If any other exception is raised, it 
> is as if in raised that exception).

The documentation doesn't match the implementation, which clearly does `x is y or x == y` to check if `x` is the element `y` from a container. Both the `__iter__` and the index-iteration method test the elements using `is` first. While the document says that `x is x` means that `x == x` should be true, it is not true for example in the case of `nan`:

----------
assignee: docs at python
components: Documentation
messages: 298671
nosy: docs at python, ztane
priority: normal
severity: normal
status: open
title: Docs should say that `x is z or x == z` is used for `x in y` in containers that do not implement `__contains__`
type: enhancement

_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue30969>
_______________________________________


More information about the New-bugs-announce mailing list