【问题标题】:Getting a "list index is out of range" for a simple list split为简单的列表拆分获取“列表索引超出范围”
【发布时间】:2021-04-25 18:51:23
【问题描述】:

我正在尝试将 txt 文档中的行读入列表,但我不断收到消息:IndexError: list index out of range。它指向最后一行 password = usersdoc1.strip() 作为问题。

k = open(filename, 'r')

lines = k.readlines()

for line in lines:

    
    usersdoc=line.strip().split('-')

    username = usersdoc[0].strip()

    password = usersdoc[1].strip()

我正在阅读的文档的每一行都有一个用户名和一个密码,由“-”分隔,我能够成功打印 usernamepassword,但是当我运行我的完整代码,我只是得到一个错误。我似乎无法弄清楚问题是什么。 Here is the document I am reading

【问题讨论】:

  • 第 2 行有一个用户名,即“Jack”,但没有密码。所以,usersdoc[1] 是导致错误的原因,b/c 该行中没有第二个元素。
  • 谢谢!我添加了 if len(usersdoc)
  • 下面的答案已经涵盖了您,但您可能也对multiple assignment 感兴趣。写起来会很好很干净,例如username, password = line.strip().split(' - ')

标签: python line readlines


【解决方案1】:

当您的for 循环到达该行时:

Jack

函数 split('-') 只返回一个具有单个值的列表:“Jack” 表示列表没有索引 [1],因为它只有一个值,即索引 [0]。

要绕过这个,您可以根据自己的处理方式做几件事:

完全忽略该行:

for line in lines:
    usersdoc=line.strip().split('-')
    if len(usersdoc) !== 2:
        continue
    username = usersdoc[0].strip()
    password = usersdoc[1].strip()

创建一个空密码:

for line in lines:
    usersdoc=line.strip().split('-')
    username = usersdoc[0].strip()
    password = usersdoc[1].strip() if usersdoc[1] else ""

我注意到您可能还没有注意到,因为 strip()split() 之前,如果用户名/密码和破折号之间有空格,您的用户名和密码的两边仍然可以有空格。

【讨论】:

  • 谢谢!很明显,这是从 Python 简介类开始的,而我非常“简介”。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2017-10-24
  • 1970-01-01
  • 2015-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-14
相关资源
最近更新 更多