New submission from Ronald Oussoren: The following code raises MemoryError instead of creating an empty list:
# START import sys class CustomIter: def __iter__(self): return self def __next__(self): raise StopIteration def __length_hint__(self): return sys.maxsize l = list(CustomIter()) #END That's because this empty iterator has a __length_hint__ that claims it returns a very large number of methods. The function listextend in Objects/listobject.c already ignores __length_hint__() when using it would overflow the size of the list, it would IMHO also be better to ignore the length hint when the attempt to resize fails as __length_hint__() is documented as a hint that may be incorrect. ---------- components: Interpreter Core messages: 282946 nosy: ronaldoussoren priority: normal severity: normal status: open title: __length_hint__ isn't a hint for list() versions: Python 3.5, Python 3.6 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue28940> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com