代码与此前版本一致却报错:evenly()函数触发'int'不可下标错误
解决自定义
evenly()函数中的TypeError问题 我在自定义的evenly()函数里一直碰到TypeError: 'int' object is not subscriptable这个错误,把evenly()注释掉之后,equall()和gauss()函数就能正常运行了——我只是复制了这两个函数的代码框架,把里面的step()或者stepn()替换成了自己写的stepe()函数。
相关代码片段如下:
import numpy as np import matplotlib.pyplot as plt from numpy.random import rand,seed,randn steps = 1 walks = 10000 walk = np.zeros(steps + 1) def step(): if rand() < 0.5: return 1.0 return -1.0 def stepn(): return randn() + 0.5 def stepe(... # 这里是自定义stepe函数的未完成代码
问题分析与解决思路
首先,'int' object is not subscriptable这个错误本质很明确:你尝试对一个整数(int类型)进行下标访问操作(比如像数组/列表那样写some_int[0]),但整数本身并不支持这种操作。
结合你的场景,既然只有替换step()/stepn()为stepe()后才触发错误,问题大概率出在stepe()函数本身,或者evenly()中调用stepe()的逻辑里:
- 检查
stepe()的返回值类型:原有的step()返回的是浮点型数值(1.0/-1.0),stepn()返回的也是randn()生成的浮点值。如果你的stepe()返回了整数,或者不小心返回了一个非预期的结构,就可能导致后续代码误把它当成可下标访问的对象来处理。 - 排查
evenly()中使用stepe()的代码:比如你是不是写了类似stepe()[0]这样的代码?如果stepe()返回的是单个数值(不是数组/列表),这种写法就会直接触发错误。
具体排查步骤
- 补全
stepe()的完整代码,确保它的返回值和step()/stepn()保持一致——返回单个数值(浮点或整数都可以,但不要返回数组/列表,除非原有逻辑就是处理这类结构)。 - 在
evenly()函数中定位触发错误的具体行,确认哪个变量是整数却被你用了下标操作。 - 可以在
stepe()函数末尾加一句print(type(return_value)),直接查看它的返回值类型,快速定位问题。
内容的提问来源于stack exchange,提问作者Brandon SeedlessBananas Mc-Wil
相关产品推荐
相关产品推荐

