Python读取Google Cloud Storage文件时出现AttributeError
解决Google Cloud Storage读取文件时的AttributeError问题
我来帮你梳理下几个大概率能解决这个问题的方向,结合你的代码和报错片段来看,主要集中在版本兼容、对象存在性和依赖冲突这几个点:
1. 优先排查Python版本兼容性问题
你当前用的是Python 2.7,而Google Cloud Storage的官方客户端库(google-cloud-storage)从2.x版本开始就彻底停止支持Python 2了。如果你的环境安装的是较新版本的客户端,就会出现这类莫名其妙的属性错误。
解决方式分两种:
- 推荐方案:升级到Python 3.6及以上版本(毕竟Python 2早就停止维护了,安全性和兼容性都没保障),然后重新安装最新版的
google-cloud-storage。 - 临时适配方案:如果暂时没法升级Python,就安装最后支持Python 2.7的客户端版本:
pip install google-cloud-storage==1.44.0
2. 确认目标Blob是否存在
有时候报错的根源是你指定的filename对应的文件在存储桶里根本不存在,这时候bucket.get_blob(filename)会返回None,再调用download_as_string()自然会触发AttributeError。
可以给代码加个前置判断,提前明确问题:
def readFileFromBucket(filename): storage_client = storage.Client() bucket = storage_client.get_bucket('<mybucket>') blob = bucket.get_blob(filename) # 新增判断:检查blob是否存在 if not blob: raise ValueError(f"文件 {filename} 在存储桶 <mybucket> 中不存在") return blob.download_as_string()
3. 修复依赖包版本冲突
你的报错来自google-resumable-media这个依赖包,很可能是它和google-cloud-storage的版本不匹配导致的。可以尝试重新安装一套兼容的依赖组合:
# 先卸载现有冲突包 pip uninstall -y google-cloud-storage google-resumable-media # 安装适配Python 2.7的兼容版本 pip install google-cloud-storage==1.44.0 google-resumable-media==1.3.2
4. 验证当前环境的GCP认证配置
虽然你提到其他环境正常,但还是要确认当前环境的GCP认证是否有效:
- 检查是否设置了
GOOGLE_APPLICATION_CREDENTIALS环境变量,指向正确的服务账号密钥文件; - 如果是本地环境,确认是否通过
gcloud auth application-default login完成了认证配置。
内容的提问来源于stack exchange,提问作者Nicky Feller
相关产品推荐
相关产品推荐

