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
相关产品推荐
相关产品推荐

