一个函数在遍历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
答案 0 :(得分:-2)
self.cwd.contents[i]
问题吗?可能是args[0]
self.cwd.contents
或类似内容的内容?for i in range(len(self.cwd.contents)):
print(self.cwd.contents)
您的代码说:
if self.cwd.contents[i].name == args[0]:
但是您的堆栈跟踪显示:
if str(self.cwd.contents[i].name) == str(args[0]): (additional str())
self.cwd
的内容可能会导致问题。这些是最可能引起问题的原因。希望有帮助。