Dlaczego list(next(iter(())) for _ in range(1))
zwraca pustą listę zamiast podnosić StopIteration
?Dlaczego lista (następna (iter (())) dla _ w zakresie (1)) == []?
>>> next(iter(()))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>> [next(iter(())) for _ in range(1)]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>> list(next(iter(())) for _ in range(1)) # ?!
[]
To samo dzieje się z funkcji niestandardowej, która wyraźnie podnosi StopIteration
:
>>> def x():
... raise StopIteration
...
>>> x()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in x
StopIteration
>>> [x() for _ in range(1)]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in x
StopIteration
>>> list(x() for _ in range(1)) # ?!
[]
Wow, bardzo podoba mi się odpowiedź w oryginalnym "duplikacie" pytania! – wheaties
To jest błąd, jest adresowany za pomocą [PEP 479] (http://legacy.python.org/dev/peps/pep-0479/), gdzie 'StopIteration' zostanie przekonwertowany na' RuntimeError', aby lista nie przestaje niepoprawnie powtarzać, tak jak tego oczekujesz. –
@ TadhgMcDonald-Jensen proszę podać to jako odpowiedź, aby móc głosować. – wheaties