Skip to content
Foxipa
Code Completion 4 Challenges

Complete the Python generator control code

Practice sending values into a paused generator, handling an injected exception, propagating one, and closing a generator with cleanup.

Advanced ~10 min read

Challenge 1

Send 5 into the paused yield and print the next yielded total.

python Your answer
def counter():
    total = 1
    while total < 10:
        amount = yield total
        total += amount

generator = counter()
print(next(generator))
print(generator)

Press Ctrl⌘Enter to check your answer

Challenge 2

Catch a ValueError injected at the paused yield and yield a recovery message.

python Your answer
def worker():
    try:
        yield "waiting"
    except ValueError:


generator = worker()
print(next(generator))
print(generator.throw(ValueError("bad")))

Press Ctrl⌘Enter to check your answer

Challenge 3

Ensure close() runs cleanup by appending to the shared events list.

python Your answer
events = []

def managed():
    try:
        yield
    finally:


generator = managed()
next(generator)
generator.close()
print(events)

Press Ctrl⌘Enter to check your answer

Challenge 4

Catch the RuntimeError in the caller after throw() lets it propagate out of the generator.

python Your answer
def worker():
    yield "waiting"

generator = worker()
next(generator)
try:
    generator.throw(RuntimeError("stop"))
except RuntimeError as error:

    print("caller handled it")

Press Ctrl⌘Enter to check your answer