gpt4 book ai didi

Python:仅发送前缀时 IRC 机器人崩溃

转载 作者:太空宇宙 更新时间:2023-11-03 17:53:07 25 4
gpt4 key购买 nike

我的 IRC 机器人在仅发送前缀 (!) 时崩溃

我明白为什么会发生这种情况,但我不知道如何让它忽略它而不是杀死它。

来源:https://github.com/SamWilber/rollbot/blob/master/rollbot.py

错误:

:turtlemansam!~turtleman@unaffiliated/turtlemansam PRIVMSG #tagprobots :!
Traceback (most recent call last):
line 408, in <module>
bot.connect()
line 81, in connect
self.run_loop()
line 117, in run_loop
self.handle_message(source_nick, message_dict['destination'], message_dict['message'])
in handle_message
self.handle_command(source, destination, message)
line 139, in handle_command
command_key = split_message[0].lower()
IndexError: list index out of range

最佳答案

罪魁祸首是那个片段:

def handle_command(self, source, destination, message):
split_message = message[1:].split()
command_key = split_message[0].lower() # L139

这是因为当您仅发送前缀时,前缀后面没有“右侧”部分。因此,当您尝试拆分不存在的 RHS 部分时,相当于执行以下操作:

>>> "".split()[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range

不太好,呃?

所以解决方案是在这个阶段添加异常处理:

try:
split_message = message[1:].split()
command_key = split_message[0].lower()
except IndexError:
print("No Command")
return

不过,我个人更倾向于检查 split_message 的长度,因为这不是一个异常行为,而是一个可能的用例场景:

split_message = message[1:].split()
if len(split_message) is 0:
print("No Command")
return
else:
command_key = split_message[0].lower()

在Python中,异常被认为是无成本的(就内存/处理器开销而言),因此通常鼓励使用它们。

不过,如果我更倾向于在这种情况下不使用异常,那是因为:

  • 当您编写算法时,总是将用例可能性集成到执行流程中,而不是破坏执行流程(这就是异常(exception)的作用),因为它提高了代码的可读性......
  • 并且它避免了隐藏另一个异常的可能性。

HTH

关于Python:仅发送前缀时 IRC 机器人崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28848257/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com