机器人结束无限循环



我已经为Twitch IRC创建了一个聊天机器人,我可以连接和创建命令等,但是我不能在命令提示符中使用键盘中断。我怀疑是因为它被困在这个无限循环中,我不知道如何修复它?顺便说一句,我是编程新手!

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

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.tvrn".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])

(编辑:我也有这个问题,其中连接到服务器似乎超时的任何原因。我设法使它与乒乓球保持连接大约40-45分钟,但随后它又断开了。

编辑:

对不起,原来的帖子太乱了。我用最少的代码创建了这个pastebin,我可以用它来重现这个问题。如果IRC聊天是不活动的,它将断开连接,我不能让它连续发送2个ping,中间没有任何消息,不确定这是因为它在第2个ping之前断开连接,还是因为第2个ping。

至少有一次它甚至在我从服务器得到第一个ping之前就断开了连接。

Pastebin: pastebin.com/sXUW50sS

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

这是一个猜测(尽管是一个有根据的猜测)。在你的套接字连接中,你可能使用try: except:Pokemon方法(必须捕获它们)

这里的事情是找到一行,你做这样的事情:

except:
    pass

并将其改为:

except (KeyboardInterrupt, SystemExit):
    raise
except:
    pass

显然,我并不是说你的程序应该捕获所有异常,然后若无其事地通过。主要问题是您可能已经这样做了(因为我不知道为什么),您应该对系统错误进行特殊处理。

最新更新