为什么它会给我一个无索引错误?当我的所有索引在python中都很好时?

为什么它会给我一个无索引错误?当我的所有索引在python中都很好时?,python,Python,每当我运行它时,输出都是“范围的列表索引put” 我需要将每个字段存储到它们自己的列表中。所以我应该有三个字段,一个表示等级,一个表示权力,还有一个表示这些卡的数量 这是名为“ranks.dat”的文件: 这是我的密码: numFile = open("ranks.dat", "r") rankList = [] skillList = [] powerList = [] while True: text = numFile.readline() text = text.rs

每当我运行它时,输出都是“范围的列表索引put”

我需要将每个字段存储到它们自己的列表中。所以我应该有三个字段,一个表示等级,一个表示权力,还有一个表示这些卡的数量

这是名为“ranks.dat”的文件:

这是我的密码:

numFile = open("ranks.dat", "r")

rankList = []
skillList = []
powerList = []

while True:
    text = numFile.readline()
    text = text.rstrip("\n")
    if text=="":
        break
    info = text.split(" ")
    rankList.append(info[0])
    skillList.append(int(info[1]))
    powerList.append(int(info[2]))

numFile.close()


print("Admiral\tGeneral\tColonel\tMajor\tCaptain\tLieutenant\tSergeant\tCorporal\tPrivate")

为什么不工作?

假设您的数据每行有一个条目:

rankList = []
skillList = []
powerList = []

# recommended way to open and close a file
with open("ranks.dat", "r") as file:
    # iterate over every lines in the file
    for line in file.readlines(): 
        # unpack each lines
        rank, skill, power = line.split(',')

        rankList.append(rank)
        skillList.append(skill)
        powerList.append(power)

代码中包含一些错误

首先,它不应该在
while
循环中,而是(如果有的话)在
中,用于文本中的行

其次,当您拆分(“”
)时,您会得到一个列表,其中的每个项目都包含字符串,格式为
“等级、技能、力量”
。您应该将其拆分为每个逗号,然后将项目附加到列表中

最后,我强烈建议检查输入的有效性(比如检查拆分的
信息中是否有三项)

诸如此类:

rankList = []
skillList = []
powerList = []

fil = open("ranks.dat", "r")
data = fil.read()
fil.close()

for item in data.split():
      info = item.split(',')
      if len(info) != 3:
            continue
      rankList.append(info[0])
      skillList.append(int(info[1]))
      powerList.append(int(info[2]))

# and do whatever you want

这取决于文件的来源,但完整正确的代码将首先检查文件是否存在,等级、技能和权限的值是否有效

请更新您的问题,并说明其不起作用的确切原因。如果输出错误,请使用实际和预期更新。如果有错误,请使用完整的错误回溯进行更新。如果输入是单行,则必须按空格分隔以获得记录列表,然后必须按逗号分隔每个记录以获得三个字段。@quamrana ok,我现在已经更改了。@mkam如果可能的话,你能帮我写出来吗?@quamrana的意思是复制并粘贴实际的错误信息到你的问题中,包括所有的回溯信息。你的编辑没有帮助。
rankList = []
skillList = []
powerList = []

fil = open("ranks.dat", "r")
data = fil.read()
fil.close()

for item in data.split():
      info = item.split(',')
      if len(info) != 3:
            continue
      rankList.append(info[0])
      skillList.append(int(info[1]))
      powerList.append(int(info[2]))

# and do whatever you want