You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python:如何在重试函数的try-except块中正确传递关键字参数?

问题解决:KeyError: 'a' 及正确调用方式

错误原因

你调用retry(create_view(), a=1, b="x")时,会先执行create_view()这个函数调用,但此时没有给create_view传任何参数,函数内部尝试取kwargs['a']自然会抛出KeyError。而retry函数需要接收的是函数对象,不是函数执行后的结果。

修复方案

把create_view()改成create_view(去掉括号,传递函数本身),正确调用代码:

retry(create_view, a=1, b="x")

执行后就能得到期望输出:a is 1 for b as x

可选优化(增强retry函数实用性)

当前retry函数无法返回被调用函数的返回值,且最后一次失败后会静默忽略异常,可以优化如下:

import time
import logging

logger = logging.getLogger(__name__)

def retry(function, **kwargs):
    max_tries = 3
    for i in range(max_tries):
        try:
            logger.info(f"try#  {i + 1}")
            logger.info(f"executing function")
            # 支持返回函数执行结果
            result = function(**kwargs)
            logger.info("function executed successfully")
            return result
        except Exception as error:
            logger.error(f"Error Reason: {error}")
            if i < max_tries - 1:
                time.sleep(10)
                logger.info(f"retrying #  {i + 2}")
            else:
                # 最后一次尝试失败后抛出异常,避免静默失败
                logger.error(f"All {max_tries} attempts failed")
                raise

def create_view(**kwargs) -> None:
    a = kwargs['a']
    b = kwargs['b']
    logger.info(f"a is {a} for b as {b} ")

# 正确调用
retry(create_view, a=1, b="x")

内容的提问来源于stack exchange,提问作者Alankrita Mishra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 00:02:42