[3.12] Make the iter_except() recipe more compact. (gh-116132) (gh0116133)

This commit is contained in:
Miss Islington (bot) 2024-02-29 18:37:00 +01:00 committed by GitHub
parent 845123d641
commit 010aac7c1a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -975,28 +975,10 @@ which incur interpreter overhead.
""" Call a function repeatedly until an exception is raised. """ Call a function repeatedly until an exception is raised.
Converts a call-until-exception interface to an iterator interface. Converts a call-until-exception interface to an iterator interface.
Like builtins.iter(func, sentinel) but uses an exception instead
of a sentinel to end the loop.
Priority queue iterator:
iter_except(functools.partial(heappop, h), IndexError)
Non-blocking dictionary iterator:
iter_except(d.popitem, KeyError)
Non-blocking deque iterator:
iter_except(d.popleft, IndexError)
Non-blocking iterator over a producer Queue:
iter_except(q.get_nowait, Queue.Empty)
Non-blocking set iterator:
iter_except(s.pop, KeyError)
""" """
# iter_except(d.popitem, KeyError) --> non-blocking dictionary iterator
try: try:
if first is not None: if first is not None:
# For database APIs needing an initial call to db.first()
yield first() yield first()
while True: while True:
yield func() yield func()
@ -1004,7 +986,6 @@ which incur interpreter overhead.
pass pass
The following recipes have a more mathematical flavor: The following recipes have a more mathematical flavor:
.. testcode:: .. testcode::