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

AWS Lambda写入S3报错:期望字符串类对象,却得到's3.Bucket'

AWS Lambda写入S3出现TypeError的原因分析与修复

错误本质

TypeError: expected string or bytes-like object, got 's3.Bucket' 是因为你在调用S3写入接口时,把**s3.Bucket对象当成了方法要求的字符串/字节类型参数**传入,最常见的是给Bucket参数传了对象而非桶名。

典型错误代码示例

比如你的代码可能是这样的:

import boto3

s3 = boto3.resource('s3')
bucket = s3.Bucket('my-bucket-name')

# 错误:将s3.Bucket对象传给Bucket参数
s3.put_object(Bucket=bucket, Key='data.csv', Body=csv_data)

两种修复方案

方案1:直接传入桶名字符串

调用S3客户端的方法时,Bucket参数必须是字符串格式的桶名称:

s3.put_object(Bucket='my-bucket-name', Key='data.csv', Body=csv_data)

方案2:使用Bucket对象的内置方法

如果已经初始化了s3.Bucket对象,直接调用它的put_object方法,不需要再传Bucket参数:

bucket.put_object(Key='data.csv', Body=csv_data)

补充说明

  • boto3有**资源(Resource)和客户端(Client)**两种模式:资源模式下的s3.Bucket是桶的抽象实例,调用其方法时无需重复指定桶名;客户端模式下所有操作都需要显式传入字符串类型的桶名称。
  • 检查你的Lambda代码最后一行的写入逻辑,确认是否混淆了这两种用法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 20:54:57