Python 索引麻烦"out of range"



我对编程相当陌生,我想知道索引中的一些东西。 我正在尝试制作一个可以键入单词的程序(我已经让这部分代码正常工作(,但是每当我运行带有索引的代码时,我都会收到此错误:列出索引超出范围。 我想知道这可能意味着什么。

谢谢。

from pynput.keyboard import Key, Controller 
keyboard = Controller()
x = 0
file = open("A:\Development\Languages\Python\Programs\NEWTEXT.txt", "r" )
for line in file:
fields = line.split(";")
while x < 340:
song = fields[x]
keyboard.type(song)
x = x + 1 
file.close()
exit()

split 函数返回一个列表。例如,在fields = split("cat;dog;mouse")中,字段将被["cat", "dog", "mouse"]。在这种情况下,有 3 个元素,如果您尝试访问超过fields[2]的任何内容,您将收到越界错误。

在您的情况下,您的循环会尝试访问fields[339],如果您的字段列表包含少于 340 个元素,这将产生错误。

欢迎来到 SO!

您的错误意味着您正在尝试读取超出其长度的列表内容。例如,如果我创建一个包含 3 个项目的列表:

mylist = ['a', 'b', 'c']
this_does_not_exist = mylist[4]  # this is undefined -> IndexError

尝试读取包含 3 个项目的列表的第 4 个元素是没有意义的,它没有定义,所以 python 会向你抛出一个IndexError

在您的情况下,读取songs = fields[x]的行必须对 x 到 339 的所有值有效,换句话说,您的line必须至少具有这么多值才能使代码正常工作。您可以使用len(fields)获取列表的长度,而不是尝试猜测它,然后像这样使用它:

for field in fields:
# now field contains fields[x]
keyboard.type(field)

这被认为比像你一样使用while更 pythonic(这也可以,但需要你编写更多的代码(。

您可以在 python 文档中阅读有关IndexError的更多信息。

因此,假设您的 NEWTEXT.txt文件内容如下所示:

jason;josh;christian;

您可以修改代码以独立于元素数量运行,如下所示:

from pynput.keyboard import Key, Controller 
keyboard = Controller()
with open('A:\Development\Languages\Python\Programs\NEWTEXT.txt') as f:
content = f.read()
for song in content.split(';'):
keyboard.type(song)

但我建议分享您的文件内容以获得更合适的答案。

当您尝试使用数组索引的订阅,但数组太小而无法提供该索引时,会导致该错误,例如:

l = [1,2,3,4] # The only available indexes are 0, 1, 2 and 3
print(l[6]) # This will trigger the index error

我要补充一点,在您的代码中使用 like 打开和关闭文件被认为是一种不好的做法,上下文管理器通常更受欢迎。

在python中,你可以直接遍历数组的元素,所以你不必使用并不断更新索引x

from pynput.keyboard import Key, Controller 
keyboard = Controller()
with open("A:\Development\Languages\Python\Programs\NEWTEXT.txt", "r") as file:
fields = [line.replace(";"," ") for line in file]
for song in fields:
keyboard.type(song)
exit()

相关内容

最新更新