这是我的代码:
with open("userDetails.txt", "r") as userDetailsFile:
for line in userDetailsFile:
if bestUsername in line:
for line in userDetailsFile:
bestAchiever = line.split('|')
user = bestAchiever[0]
firstName = bestAchiever[1]
surname = bestAchiever[2]
age = bestAchiever[3]
yearGroup = bestAchiever[4]
这就是userDetailsFile
的样子:
john14|john|doe|14|11
我收到错误:
firstName = bestAchiever[1]
IndexError: list index out of range
知道为什么会这样吗?我不确定为什么我会收到此错误。
答案 0 :(得分:1)
那时bestAchiever
是什么?不是你认为它是什么,计算机认为它是什么?那应该是你的第一个调试步骤。
运行时错误表明变量的长度小于2。
请注意,您遇到严重的逻辑错误:
for line in userDetailsFile:
if bestUsername in line:
for line in userDetailsFile:
你的第一个和第三个循环正在争夺对line
的控制权。这不会为你好好结束。
答案 1 :(得分:0)
我没有得到你想要做的事情,但要注意userDetailsFile上的内部循环。您正在使用相同的文件描述符来继续迭代。
如果您的文件不大,您可能想要userDetailsFile.readlines()
将整个内容放入列表中,并在此列表中执行循环。
答案 2 :(得分:0)
我不确定您的问题详情,但我认为您希望这样:
best_user = 'john14'
with open('userdetailsfile', 'r') as f:
for line in f:
if best_user in line:
words = line.split('|')
f_name, s_name, age, yeargroup = words
让我知道它是否有效。
答案 3 :(得分:0)
我已经弄明白了。 对于那些遇到同样问题的人来说,这就是我做错了:
lineWithoutNewLine = line.rstrip('\n')
bestAchiever = lineWithoutNewLine.split('|')
user = bestAchiever[0]
firstName = bestAchiever[1]
surname = bestAchiever[2]
age = bestAchiever[3]
yearGroup = bestAchiever[4]
我必须添加line.rstrip('\n')