New submission from Edouard KLEIN: In this StackOverflow question:
http://stackoverflow.com/questions/43935187/how-come-an-object-that-implements-iter-is-not-recognized-as-iterable/43935360#43935360 the question of why an object that implements __iter__ through __getattr__ does not work with the "in" syntax is raised. The accepted answer is that the interpreter checks for __iter__ instead of just calling it. If that's the case, I think that: - Either the behaviour of the interpreter should be changed to accept any object that implements __iter__, regardless of how, - Or, if there is a technical reason why the interpreter can't change its behavior, the documentation https://docs.python.org/3/library/stdtypes.html#iterator-types should make it clear that __iter__ must be hard coded into the object. Here is the code of the object that arguably should be iterable but is not: class IterOrNotIter: def __init__(self): self.f = open('/tmp/toto.txt') def __getattr__(self, item): try: return self.__getattribute__(item) except AttributeError: return self.f.__getattribute__(item) IterOrNotIter().__iter__().__next__() # Works 'a' in IterOrNotIter() # Raises a TypeError ---------- components: Interpreter Core messages: 293547 nosy: Edouard KLEIN priority: normal severity: normal status: open title: The 'in' syntax should work with any object that implements __iter__ type: behavior versions: Python 3.6 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue30352> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com