列表未超出范围时发生IndexError

时间:2019-07-17 17:03:10

标签: python index-error

一个函数在遍历2个值的列表时不应该返回IndexError的情况。

我正在为我正在开发的游戏创建一个简单的外壳,而我的cd函数表现得有些奇怪。此外壳程序的默认“目录”包括“主目录”和“其他”目录。我可以cd到“ other”和“ ..”很好,但是由于某种原因,当我尝试cd到“ home”时,抛出错误。最坏的情况是,我总是可以只使用异常处理,但是我想保留它作为最后的手段。

到目前为止,我已经包含了一些print语句来确定返回错误的列表的长度,以及循环内的print语句来确定引发错误的迭代次数。此外,此错误仅在列表值之一“ home”时发生。另外,使用异常处理时,cd命令有效!但是我真的很想找到问题的根源,而不是用一个Except来掩盖它。

这是有问题的cd函数:

def cd(self, args):
    if len(args) > 1:
        print("\033[94mToo many arguments\033[0m")
    elif args[0] == "..":
        if self.cwd.root != True:
            self.cwd = self.cwd.parent
    else:
        for i in range(len(self.cwd.contents)):
            if self.cwd.contents[i].name == args[0]:
                self.cwd = self.cwd.contents[i]

我希望我的cwd更改为“ home”而没有IndexError。这是我遇到的错误:

Traceback (most recent call last):
  File "main.py", line 160, in <module>
    method(args[1:])
  File "main.py", line 90, in cd
    if str(self.cwd.contents[i].name) == str(args[0]):
IndexError: list index out of range

1 个答案:

答案 0 :(得分:-2)

  1. 您确定是self.cwd.contents[i]问题吗?可能是args[0]
  2. 在这种情况下,是否可以替换错误的代码以确保self.cwd.contents或类似内容的内容?
for i in range(len(self.cwd.contents)):
    print(self.cwd.contents)
  1. 还可以确定您在正确的地方吗?

您的代码说:

if self.cwd.contents[i].name == args[0]:

但是您的堆栈跟踪显示:

if str(self.cwd.contents[i].name) == str(args[0]): (additional str())

  1. 最后,替换self.cwd的内容可能会导致问题。

这些是最可能引起问题的原因。希望有帮助。