Smartsheet API新手求助:get_sheet报'type' object has no attribute '__getitem__'错误
get_sheet时的'type' object has no attribute '__getitem__'错误 嗨,我来帮你搞定这个问题!从你的报错追踪信息来看,这个错误的根源很明确——是Smartsheet Python SDK的枚举类型处理逻辑在你的Python环境里跑不通。
问题到底出在哪?
具体来说,报错发生在smartsheet/types.py里的EnumeratedValue.set()方法,代码尝试用self.__enum[value]去获取枚举值,但self.__enum是一个类(type)而不是可索引的字典或序列。这种情况90%是因为你的Python版本和Smartsheet SDK版本不兼容:你现在用的是Python 2.7,而新版的Smartsheet SDK早就放弃对Python 2.x的支持了,SDK内部用了Python 3的枚举实现,在Python 2.7里就会触发这个奇怪的错误。
另外,也有可能是你装的SDK版本刚好有个小bug,但版本不兼容是最常见的原因。
怎么解决?给你三个方案
方案1:降级SDK到兼容Python 2.7的版本
Smartsheet SDK的2.x系列是最后支持Python 2.7的版本,你可以用pip安装指定版本:
pip install smartsheet==2.10.1
这个版本在Python 2.7里能正常处理枚举,不会再出现这个索引错误。
方案2:升级到Python 3.x(强烈推荐)
Python 2.7已经停止维护好几年了,不光是Smartsheet,大部分开源库都不再支持它了。如果你的项目允许的话,赶紧把Python版本升到3.7以上,然后安装最新版的SDK:
pip install --upgrade smartsheet
升级之后不仅能解决这个问题,还能用上SDK的新功能和安全补丁,一举两得。
方案3:微调客户端初始化代码
如果暂时不想动版本,可以试试在初始化客户端时指定API版本,有时候能兼容旧环境:
import smartsheet sheet_id='0823....' # 初始化时指定API版本为2.0 smartsheet_client = smartsheet.Smartsheet(access_token='6av...', api_version='2.0') my_sheet = smartsheet_client.Sheets.get_sheet(sheet_id)
验证步骤
按上面的方案调整后,重新运行代码:
- 如果还是报错,先检查你的Sheet ID是不是正确的,API密钥有没有访问这个Sheet的权限
- 可以先用Smartsheet的官方API测试方式(比如curl)调用
GET /sheets/{sheetId}接口,确认密钥和Sheet ID是有效的
内容的提问来源于stack exchange,提问作者user10257779

