Python操作Sqlite3报错TypeError: 'float' object is not subscriptable
Python操作Sqlite3报错
TypeError: 'float' object is not subscriptable解决方案 报错原因
- 取值对象错误:你已经通过
cursor.fetchone()把查询结果赋值给了变量,后续写cursor[0][0]是在游标对象上做索引,完全指向了错误的操作对象。 - 下标逻辑错误:
fetchone()返回的(0.6655,)是单元素元组,取[0]就能拿到里面的浮点数;如果对拿到的浮点数再做[0]下标访问,就会触发「float对象不支持下标取值」的类型错误。 - 冗余操作:纯SELECT查询不需要调用
connection.commit(),commit()仅在执行增/删/改等会修改表数据的操作后才需要调用。
正确实现代码
cursor.execute("SELECT BoughtPrice FROM Trades ORDER BY IndexNo DESC LIMIT 1") # 获取查询结果元组 result = cursor.fetchone() print(result) # 输出格式为 (0.6655,) # 直接取元组第一位即可得到纯浮点值 boughtprice = result[0] print(boughtprice) # 输出 0.6655
可选优化写法
如果需要兼容表内无数据、查询结果为空的场景,可以加判空逻辑避免报错:
cursor.execute("SELECT BoughtPrice FROM Trades ORDER BY IndexNo DESC LIMIT 1") result = cursor.fetchone() # 无结果时可根据业务需要设置默认值 boughtprice = result[0] if result is not None else 0.0
如果确定查询一定有返回值,可以简化为一行取值:boughtprice = cursor.execute("SELECT BoughtPrice FROM Trades ORDER BY IndexNo DESC LIMIT 1").fetchone()[0]
内容的提问来源于stack exchange,提问作者Zak Pinter
相关产品推荐
相关产品推荐

