【发布时间】:2021-09-15 12:48:44
【问题描述】:
import config
def parse():
chat_log = open('chat.log', "r", encoding="utf-8")
chat = chat_log.read().split("\n\n\n")
chat_parsed = open("chat.txt", "w", encoding="utf-8")
lines = []
try:
for i in chat:
if len(i) > 0:
x = i.split(" ")
if config.nickname != i.split(" ")[2] and config.nickname != i.split(" ")[4] \
and f"{config.nickname} = #{config.channel}" not in i.split("—")[1].split(":")[2]:
if "PING" not in i:
if len(i) > 0:
user = i.split("—")[1].split(":")[1].split("!")[0]
msg = i.split("—")[1].split(":")[2]
line = [user, msg]
lines.append(line)
for i in lines:
chat_parsed.write(str(i))
chat_parsed.write('\n')
chat_log.close()
chat_parsed.close()
except IndexError:
chat_parsed.write('"[ERROR], [ERROR]"\n')
chat_log.close()
chat_parsed.close()
由于某种我不明白的原因,在第 2800 次调用它之后(大约),它进入了 except 部分。我正在使用它来解析聊天日志,以便稍后在 Twitch 聊天机器人上进行更轻松的处理,因此我必须多次调用解析器才能对其进行更新。任何人都可以帮忙吗?提前致谢!
另外,错误似乎来自if config.nickname != i.split(" ")[2] and config.nickname != i.split(" ")[4] and f"{config.nickname} = #{config.channel}" not in i.split("—")[1].split(":")[2] 部分。
【问题讨论】:
-
通过调用这些拆分函数并立即按索引访问,您对字符串形式有很多假设。例如
i.split(" ")[4]假定字符串i(顺便说一句,这有点误导)至少有4 个空格。很可能它的空格少于 4 个,因此调用第五个索引i.split(" ")[4]会导致索引错误。要进一步调试,您需要了解有关输入数据的更多信息。我建议您打印出代码失败的字符串。将if config.nickname [...]部分包含在另一个try-except-block 中,并将print(i)包含在异常中。 -
你能打印出究竟是什么错误吗?此外,如果您在代码中将 for 循环外的
i初始化为i = '',则在收到错误时也可以打印输入。看到这个:stackoverflow.com/questions/9555133/…
标签: python index-error