结束机器人的无限循环

时间:2016-09-23 10:38:41

标签: python loops infinite

我为 Twitch IRC 创建了一个聊天机器人,我可以连接并创建命令等,但是我不能在命令提示符下使用键盘中断。我怀疑是因为它陷入了无限循环,我不知道如何解决这个问题?我是编程btw的新手!

以下是我Run.py中的代码,openSocket()在另一个文件中定义,基本上是与服务器的连接。 s = socket.socket. while循环中的第一部分基本上只是读取服务器消息,我认为这对你们来说非常简单!

s = openSocket()
joinRoom(s)
readbuffer = ""

while True:
        readbuffer = readbuffer + s.recv(1024).decode("utf-8")
        temp = str.split(readbuffer, "\n")
        readbuffer = temp.pop()

        for line in temp:
            if "PING" in line:
                s.send("PONG :tmi.twitch.tv\r\n".encode("utf-8"))
                print("---SENT PONG---")
            printMessage(getUser, getMessage, line)
            message = getMessage(line)

            for key in commands:
                command = key
                if command in message:
                    sendMessage(s, commands[command])

((编辑:我也有这个问题,因为无论出于什么原因,与服务器的连接似乎都超时了。我设法让它与ping / pong保持连接约40-45分钟,但之后再次断开连接。< / p>

编辑:

抱歉,原帖非常凌乱。我用尽可能少的代码来创建这个pastebin来重新创建问题。 如果IRC聊天处于非活动状态,它将断开连接,我无法让它连续发送2个ping而中间没有任何消息,不确定是否因为它在第二次ping之前断开连接或是因为第二次ping。

至少有一次,在我从服务器获得第一次ping之前,它已经断开连接。

Pastebin:pastebin.com/sXUW50sS

1 个答案:

答案 0 :(得分:0)

您发布的部分代码与您描述的问题没有太大关系。

这是一个猜测(虽然是受过教育的人)。在您的套接字连接中,您可能正在使用try: except:并使用Pokemon方法(必须全部捕获它们)

这里的目的是找到一条你正在做这样的事情的路线:

except:
    pass

并将其更改为:

except (KeyboardInterrupt, SystemExit):
    raise
except:
    pass

显然,我并不是想在这里说你的porgram应该捕获所有异常并且只是在没有发生的情况下通过。重点是你可能已经这样做了(因为我没有想法 - 原因),你应该对系统错误进行特殊处理。