@Derfirm
Noname Developer.

Как правильно парсить словарь?

Доброго времени суток, возникает ошибка, в случае, если в декоратор передать несуществующий ключ
def get_params(*args):
    def my_decorator(method):
        def wrapped(**kwargs):
            items={"params":{"power":{"basevalue":5}, "damage":{"basevalue":5}}}
            test = {item: items["params"].get(item)["basevalue"] for item in args}
            kwargs.update(test)
            return method(**kwargs)
        return wrapped
    return my_decorator



@get_params("power","damagea")
def params_from(power=None, damage=None,**kwargs):
    return power, damage


print params_from()

можно ли как-то правильнее расписать декоратор, чтобы программа не падала в таком случае?
  • Вопрос задан
  • 3692 просмотра
Решения вопроса 2
qmax
@qmax
программер
А зачем у вас константный items внутри wrapped?
Если вынести его в get_params и проверить наличие args, то можно выкинуть исключение в момент декорирования, а не в момент вызова.
Ответ написан
@Mintormo
Вот так пойдет?
def get_params(*args):
    def my_decorator(method):
        def wrapped(**kwargs):
            items = {"params":{"power":{"basevalue":5}, "damage":{"basevalue":5}}}
            test  = {item: items["params"].get(item)["basevalue"]
                       for item in args if item in items["params"]}
            kwargs.update(test)
            return method(**kwargs)
        return wrapped
    return my_decorator

@get_params("power","damagea")
def params_from(power=None, damage=None,**kwargs):
    return power, damage

print params_from()
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@s1dney
Скорее всего я что-то не так понял
try:
	test = dictionary['not_exists_keys']
except KeyError:
	return False
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы