AWS CLI与Boto3调用S3时出现AttributeError错误求助
解决awscli/boto3调用S3时的AttributeError: 'str' object has no attribute 'get'
问题情况
使用Python应用通过awscli和boto3调用S3时,突然触发AttributeError: 'str' object has no attribute 'get'错误,本地单元测试中的boto3 Stubber也受此影响。
错误栈
File "/usr/local/Cellar/awscli/2.17.28/libexec/lib/python3.11/site-packages/awscli/botocore/client.py", line 496, in _is_s3_dualstack_mode enabled = self.scoped_config.get('s3', {}).get( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: 'str' object has no attribute 'get'
环境信息
aws-cli/2.17.28 Python/3.11.9 Darwin/23.6.0 source/x86_64
配置文件情况
初始未修改的配置:
[default] region = us-east-1
添加S3相关配置后问题仍未解决:
[default] region = us-east-1 s3 = signature_version = s3v4
解决方案
检查配置文件格式与加载优先级
确认所有AWS配置文件(~/.aws/config、~/.aws/credentials、系统级/etc/aws/config)中,s3字段为层级结构(如上述修改后的配置),而非单独的字符串值(比如误写为s3 = some_string)。同时注意配置文件的加载顺序,避免其他位置的配置覆盖当前使用的配置。排查环境变量干扰
检查是否存在AWS_CONFIG_FILE、AWS_S3等环境变量,这类变量可能会覆盖配置文件设置,导致s3被解析为字符串。可通过echo $AWS_CONFIG_FILE等命令查看状态,必要时清空相关变量。清理botocore缓存
删除botocore默认缓存目录~/.aws/cache,缓存文件可能留存旧的配置解析结果,清理后重新运行程序。核对依赖版本兼容性
awscli、boto3与botocore版本需保持兼容。针对awscli 2.17.28,可安装对应版本的依赖:pip install botocore==1.34.28 boto3==1.34.28(版本号可根据实际情况调整,确保与awscli版本匹配)
内容的提问来源于stack exchange,提问作者Football52
相关产品推荐
相关产品推荐

