Ошибка с утверждением для декоратора, который добавляет дату - PullRequest
0 голосов
/ 13 апреля 2020

Я должен был написать декоратор, который добавляет дату с заданным форматом в качестве аргумента к dict, который возвращается функцией. Вот мой код:

import datetime  # do not change this import, use datetime.datetime.now() to get date


def add_date(format):
    def decorator(f):
        def inner(*args):
            dic=dict(f(*args))
            dic['date']=datetime.datetime.now().strftime(format)
            return dic
        return inner
    return decorator

@add_date('%B %Y')
def get_data(a=5):
    return {1: a, 'name': 'Jan'}

assert get_data(2) == {

    1: 2, 'name': 'Jan', 'date': 'April 2020'

}

Но после выполнения обязательных тестов я не прошу их из-за предупреждения:

Traceback (most recent call last):
  File "/home/runner/unit_tests.py", line 64, in test_add_date
    self.assertEqual(get_data(a=5), {
TypeError: inner() got an unexpected keyword argument 'a'

И я понятия не имею, как это исправить. Есть предложения?

1 Ответ

0 голосов
/ 13 апреля 2020

Вы передаете 5 в качестве ключевого слова аргумент (a=5), но ваша функция inner принимает только позиционные аргументы (*args). Если он принимает ключевые слова-аргументы (**kwargs), как, например, это решит вашу проблему

def inner(*args, **kwargs):
    dic = dict(f(*args, **kwargs))
    dic['date']=datetime.datetime.now().strftime(format)
    return dic

Проверьте Python документацию для получения дополнительной информации по позиционному и ключевому слову аргументы.

...