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

Python函数内创建列表报错:'int'对象不可下标访问问题排查

问题分析与解答

错误原因解析

你的代码报错TypeError: 'int' object is not subscriptable的核心问题出在这一行:

fib = fib[i-1]+fib[i-2]

原本fib是一个列表([1,2]),但你在这里把fib[i-1]和fib[i-2]两个整数相加的结果赋值给了fib,这直接把fib的类型从列表变成了整数。当进入下一次循环时,fib[-1]试图对整数进行下标访问,自然就会抛出错误——整数是没有下标属性的。

正确的做法应该是把新计算出的斐波那契数追加到列表末尾,而不是覆盖整个列表。比如用fib.append(fib[i-1]+fib[i-2])来替代那行错误代码。

修正后的完整代码如下:

def fibo(num):
    fib = [1, 2]
    i = 2
    while fib[-1] < int(num):
        fib.append(fib[i-1] + fib[i-2])
        i += 1
    return fib

关于函数内创建列表的疑问

当然可以在Python函数内创建列表!这是非常常见的写法,很多函数都会在内部生成、处理列表后返回。你的问题完全不是“能不能创建”,而是后续对列表变量的错误赋值导致了类型变更,进而引发报错。

关于提问被踩的可能原因

收到踩票通常是因为提问的质量可以优化,常见的原因包括:

  • 代码格式混乱:你最初贴的代码没有换行和缩进,很难快速看懂逻辑,增加了回答者的理解成本;
  • 问题描述不够完整:虽然你给出了报错信息,但没有明确说明自己的预期行为,也没有提到尝试过的排查步骤(比如有没有打印fib的类型来定位问题);
  • 可能属于重复问题:这类“变量类型被意外覆盖导致下标错误”的问题在Stack Overflow上已经有很多类似案例,踩票可能是因为没有先搜索已有答案。

改进建议:

  • 提问时一定要用代码块格式化代码,保持缩进和换行清晰;
  • 说明你的预期输出是什么,以及你尝试过哪些调试步骤(比如print(type(fib))观察变量类型变化);
  • 提问前先搜索相关错误信息,看看有没有现成的解决方案。

内容的提问来源于stack exchange,提问作者Swastik Mohapatra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:22:34