for循环中的int数据类型溢出(在python中)

2024-06-25 23:51:30 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的python脚本,它给了我这样一个异常

IndexError: index out of range: 202252

如果我把90万换成更小的,效果会很好。函数randint使用了很多更大的数字,而这不是抛出异常的地方,异常被抛出在for q in range(long(fromline),long(fromline)+500L):这一行,我想我在长整型转换或某种数据类型溢出方面有一些问题。在

^{pr2}$

编辑

#read the lines from file
f = open("asd.txt")
lines = f.readlines()
f.close()

# print "if I uncoment this, then exception is thrown" +str(len(lines))

如果我这么做

打印行[1] 打印线[100000] ... 在

它很好用,我真的很困惑,我从来没有见过类似的问题

编辑

我发现我的问题到底是什么,请看我的答案


Tags: of函数脚本编辑index地方range数字
3条回答

使用以下方法会更安全,尽管可能不是那么正式:

for line in lines[long(fromline):long(fromline)+500L]:
   if len(str(line)) < 3:
      print "blabla"

你为什么不把这个列表切片,然后在这个切片上迭代呢?在

for q in lines[fromline:fromline+501]:
   if len(q) < 3:
      print "blabla"

我还去掉了一些不必要的类型转换(假设所有的行实际上已经是字符串)。注意,Python会在数据太大而不能成为整数时将其转换为long,因此您很少需要自己将数字转换为long。在

顺便说一句,您原始代码中的错误是,您选择了一个随机行,而该随机行位于最后一行的500行之内,当您尝试遍历列表的末尾时,您得到一个IndexError。在

python中没有整数溢出。也许你的列表不够大,无法在202252索引处访问。检查lines的长度。在

相关问题 更多 >