Python调用split函数返回空列表 触发IndexError索引越界错误求助
问题原因分析
- 变量作用域错误
你在cmdIn函数内部定义的cmd和splitCmd都是局部变量,函数执行结束后不会修改全局定义的同名变量,所以全局的splitCmd永远是初始化的空列表[],此时直接访问splitCmd[0]必然触发IndexError。 - 空输入未做合法校验
就算解决作用域问题,当用户输入空内容时,split()返回的就是空列表,此时直接访问索引0依旧会报错。另外input()函数不会返回None,空输入的返回值是空字符串"",你写的if cmd == None判断永远不会触发,无法拦截空输入场景。 - 索引访问未做长度校验
即便第一个元素存在,你在逻辑中直接访问splitCmd[1],如果分割后的列表长度小于2,也会触发同样的索引越界错误。
修复后参考代码
rep = "repeat" errorColor = "\033[1;31;47m " def cmdIn(): cmd = input(">>") # 直接返回分割结果,避免全局变量污染 return cmd.split() while True: splitCmd = cmdIn() print(splitCmd) # 先校验列表非空再访问索引 if not splitCmd: print("Error: no command entered") continue if splitCmd[0] == rep: cmdArgs = "" # 先校验长度>=2再访问第二个元素 if len(splitCmd) >= 2 and splitCmd[1] == rep: print() else: cmdArgs = " ".join(splitCmd) else: print("Unknown error")
内容的提问来源于stack exchange,提问作者NDev
相关产品推荐
相关产品推荐

