effectivepython icon indicating copy to clipboard operation
effectivepython copied to clipboard

Item 78: page 374, wrong function name: says `feed_func`, should be `feed_animal`

Open kirisakow opened this issue 2 years ago • 2 comments

(2nd ed)

The code block in the middle of the page is about unittest.mock.patch and yet, instead of calling feed_animal(database, name, now), it calls feed_func(database, name, now) (a leftover of the precedent approach of using keyword-only arguments for injecting mocks).

Wrong code:

def do_rounds(database, species, *, utcnow=datetime.utcnow):
    now = utcnow()
    feeding_timedelta = get_food_period(database, species)
    animals = get_animals(database, species)
    fed = 0
    for name, last_mealtime in animals:
        if (now - last_mealtime) > feeding_timedelta:
            feed_func(database, name, now)        # wrong function name
            fed += 1
    return fed

Correct code:

def do_rounds(database, species, *, utcnow=datetime.utcnow):
    now = utcnow()
    feeding_timedelta = get_food_period(database, species)
    animals = get_animals(database, species)
    fed = 0
    for name, last_mealtime in animals:
        if (now - last_mealtime) > feeding_timedelta:
            feed_animal(database, name, now)        # correct function name
            fed += 1
    return fed

kirisakow avatar Aug 17 '22 18:08 kirisakow

Thank you for the report! I also found this in the printed version of the book, but the example code doesn't have the same error:

https://github.com/bslatkin/effectivepython/blob/4ae6f3141291ea137eb29a245bf889dbc8091713/example_code/item_78.py#L150 https://github.com/bslatkin/effectivepython/blob/4ae6f3141291ea137eb29a245bf889dbc8091713/example_code/item_78.py#L264

Will resolve it.

bslatkin avatar Jun 01 '24 16:06 bslatkin

Ah -- because it was fixed in #73

bslatkin avatar Jun 02 '24 05:06 bslatkin