Steven D'Aprano <steve+pyt...@pearwood.info> added the comment:
How is this not a regression? And a very serious one by the sound of it. All the examples that are said to go into an infinite loop work fine in 3.9. (Obviously I can't check the match statement example in 3.9.) If the Sequence Protocol really has been dropped from Python's execution model, shouldn't there be a PEP for such a major change in behaviour? Legacy or not, it is still a part of the language. At the very least, the examples shouldn't swallow the IndexError and go into an infinite loop. Brandt said: > the destructuring is basically the same as if you had written: > > [x, *w, y] = Seq() > > ...which also hangs. It works fine in 3.9, with or without inheriting from the Sequence ABC. # Python 3.9 >>> class A: ... def __len__(self): ... return 5 ... def __getitem__(self, i): ... print(i) ... if i < 5: ... return i ... raise IndexError ... >>> [x, *y, z] = A() 0 1 2 3 4 5 >>> x, y, z (0, [1, 2, 3], 4) Likewise for list(A()), etc. The __len__ method isn't needed for iteration to work correctly. I just included it to match Pierre's example. Inheriting from collections.abc.Sequence does not change the behaviour. Still in 3.9: >>> list(A()) 0 1 2 3 4 5 [0, 1, 2, 3, 4] I think that closing this is as Not A Bug was premature. If this isn't a bug, then I have no idea what counts as a bug any longer :-( ---------- nosy: +steven.daprano _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue44741> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com