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

在JetBrains PyCharm中运行Python代码时遇'int' object not subscriptable错误

解决'int' object not subscriptable错误

先来说说这个错误的本质:当你尝试对一个整数(int类型)使用下标操作(比如something[0])时就会触发它——整数显然不是可以通过下标访问的序列类型(比如列表、元组)。

看你的代码,问题出在循环处理查询结果的部分:

for row in cursor:
    result.append(row[0])
    result.append(row[1])
    result.append(row[2])
    re...  # 这里应该是继续append其他row元素

你的函数注释明确说明要返回元组的列表,但当前代码把每一行的每个元素都单独追加到result里,最后result会变成一个扁平的列表,比如:
[1, '2024-05-20', '张三', 'Python开发', ...]
而不是预期的:
[(1, '2024-05-20', '张三', 'Python开发', ...), (2, '2024-05-19', '李四', 'Java开发', ...)]

如果之后你尝试遍历这个扁平列表,对其中的整数元素做下标操作(比如想取元组里的某个字段),自然就会抛出这个错误。

修正方案

直接把整个row元组追加到result里就可以了,不需要逐个元素拆分:

def position_list(db, limit=10):
    """Return a list of positions ordered by date
    db is a database connection
    return at most limit positions (default 10)
    Returns a list of tuples (id, timestamp, owner, title, location, company, description)
    """
    cursor = db.cursor()
    # 注意:你的SQL里少了location和company字段,和注释的返回元组字段不匹配,建议补上
    sql = "SELECT id, timestamp, owner, title, location, company, description FROM positions ORDER BY timestamp DESC LIMIT %s"
    cursor.execute(sql, (limit,))  # 用参数化查询更安全,避免SQL注入
    result = []
    for row in cursor:
        result.append(row)  # 直接追加整个行元组
    return result

额外提示

  1. 你的SQL语句里只查询了id, timestamp, owner, title, description,但函数注释说要返回包含location, company的元组,记得把这两个字段加到SQL里,避免返回的元组字段缺失。
  2. 用参数化查询(cursor.execute(sql, (limit,)))代替直接把limit写死在SQL里,既灵活又能防止SQL注入风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:47:16