Python Boto3上传文件至S3返回False无异常的问题求助
嘿,我一眼就发现问题所在了——你对boto3的upload_file方法返回值的判断完全错了!
核心问题:错误的返回值判断逻辑
boto3的s3.meta.client.upload_file()方法有个关键特点:上传成功时它会返回None,而不是True;只有当上传失败时,它才会主动抛出异常。你的代码里用is True去判断返回值,哪怕上传完全成功,这个条件也永远不会成立,所以不管结果如何都会走进else分支,打印“上传失败”的提示——这就是为什么你没触发任何异常却看到错误信息的原因。
修正后的代码
把多余的返回值判断去掉,因为只要upload_file没有抛出异常,就代表上传成功了:
try: # 只要不抛异常,就代表上传成功 s3.meta.client.upload_file(fileLocation, bucket_name, objectName) print("Upload log file to s3 bucket successfully") return True except s3.exceptions.ClientError as e: print(f"Known S3 error occurred: {e}") return False except Exception as e: print(f"Unexpected error: {e}") return False
如果修正后还是有问题,这些点可以排查:
- 本地文件验证:先确认
fileLocation指向的文件真的存在,且运行代码的用户有读取权限。可以加一行import os; print(os.path.exists(fileLocation))来快速验证。 - AWS权限检查:确保你的AWS凭证拥有
s3:PutObject权限,能往目标bucket写入对象。 - 对象键格式:检查
objectName有没有S3不允许的特殊字符(比如空格、非ASCII字符等),S3对象键有特定的命名规范。 - 凭证有效性:确认代码使用的AWS配置(不管是环境变量、~/.aws/credentials文件还是IAM角色)是正确的,且有权限操作这个bucket。
内容的提问来源于stack exchange,提问作者beasone
相关产品推荐
相关产品推荐

