Add another example of PEP 479 justification, courtesy of Isaac Schwabacher
This commit is contained in:
parent
d6edada20d
commit
a09e8b3dae
19
pep-0479.txt
19
pep-0479.txt
|
@ -72,9 +72,9 @@ stumble on these cases by accident::
|
||||||
print('commit')
|
print('commit')
|
||||||
|
|
||||||
def do_it():
|
def do_it():
|
||||||
print('Refactored preparations')
|
print('Refactored initial setup')
|
||||||
yield # Body of with-statement is executed here
|
yield # Body of with-statement is executed here
|
||||||
print('Refactored finalization')
|
print('Refactored finalization of successful transaction')
|
||||||
|
|
||||||
def gene():
|
def gene():
|
||||||
for i in range(2):
|
for i in range(2):
|
||||||
|
@ -92,7 +92,20 @@ subtle bug: if the wrapped block raises ``StopIteration``, under the
|
||||||
current behavior this exception will be swallowed by the context
|
current behavior this exception will be swallowed by the context
|
||||||
manager; and, worse, the finalization is silently skipped! Similarly
|
manager; and, worse, the finalization is silently skipped! Similarly
|
||||||
problematic behavior occurs when an ``asyncio`` coroutine raises
|
problematic behavior occurs when an ``asyncio`` coroutine raises
|
||||||
``StopIteration``, causing it to terminate silently.
|
``StopIteration``, causing it to terminate silently, or when ``next``
|
||||||
|
is used to take the first result from an iterator that unexpectedly
|
||||||
|
turns out to be empty, for example::
|
||||||
|
|
||||||
|
# using the same context manager as above
|
||||||
|
import pathlib
|
||||||
|
|
||||||
|
with transaction():
|
||||||
|
print('commit file {}'.format(
|
||||||
|
# I can never remember what the README extension is
|
||||||
|
next(pathlib.Path('/some/dir').glob('README*'))))
|
||||||
|
|
||||||
|
In both cases, the refactoring abstraction of ``yield from`` breaks
|
||||||
|
in the presence of bugs in client code.
|
||||||
|
|
||||||
Additionally, the proposal reduces the difference between list
|
Additionally, the proposal reduces the difference between list
|
||||||
comprehensions and generator expressions, preventing surprises such as
|
comprehensions and generator expressions, preventing surprises such as
|
||||||
|
|
Loading…
Reference in New Issue