我们有一段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等值模拟方法参数,这些值不会产生任何差异,但可以帮助我们避免出现问题。