类型错误:_convert_to_request_dict()缺少一个必需的位置参数'endpoint_url'。

8
我们有一段Python代码,可以安装最新版本的库(如boto3等),并且该代码被执行。在boto3版本更新到1.24.96之前,该代码按预期工作,但是后来的版本在2022年10月25日发布后,调用使用boto3的_convert_to_request_dict()代码时会抛出以下错误: TypeError: _convert_to_request_dict() missing 1 required positional argument 'endpoint_url' 经进一步分析发现,在botocore的client.py类中_convert_to_request_dict()方法的定义在旧版本和新版本中存在差异。旧版本的定义如下(botocore 1.27.96):
def _convert_to_request_dict(
    self, api_params, operation_model, context=None
):

如果我们观察这个方法的签名,它需要四个参数,并且不包含属性endpoint_url。

** 最新版本(botocore 1.28.3)定义如下 **

def _convert_to_request_dict(
    self,
    api_params,
    operation_model,
    endpoint_url,
    context=None,
    headers=None,
    set_user_agent_header=True,
):

如果我们从最近的方法签名中观察,它需要7个参数并且包含endpoint_url作为参数,在调用相同方法时必须添加。因此,我们理解了问题的原因,所以我们快速定义了旧的boto3版本,并且它可以正常工作。但是从长远来看,这种方法不能解决问题,有人可以帮助我们如何使用诸如None或null等值模拟方法参数,这些值不会产生任何差异,但可以帮助我们避免出现问题。


1
澄清一下:您是直接在脚本中调用“_convert_to_request_dict”,还是调用另一个调用此内部方法的boto3方法? - Bert Blommers
嘿,我会检查一下 PynamoDB 库中的这个更改。他们也使用了那个私有方法,不得不更新他们如何使用它 - https://github.com/pynamodb/PynamoDB/pull/1083 - Alex
1个回答

3

根据OP的评论,我们更新到最新的pynamodb版本后,问题得到了解决。它引入了https://github.com/pynamodb/PynamoDB/pull/1083。目前写作时的版本为5.4.1

这可能不是完全解决OP问题的方法,但对于我们来说,这确实是我们正在寻找的解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接