IRCUtils:无法生成内存视图,因为对象中没有缓冲区

2024-09-30 06:28:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我在考虑制作一个简单的IRC机器人。似乎有各种各样的Python软件是为这个目的而编写的,具有不同的特性集和不同程度的复杂性。我找到了this package,它似乎有一个用户友好的界面,并安装了它。在

我首先遇到了这样一个问题:这个包似乎是在没有考虑python3的情况下编写的。我在上面运行了2to3转换器工具,随后能够导入包。但是,在试图从文档中复制示例时,我在问题标题中得到了错误。这是我的脚本,去掉了频道名:

from ircutils import bot

class hambot (bot.SimpleBot):
    def on_channel_message (self, event):
        if event.message == 'go away hambot':
            self.quit('Goodbye.')

def main ():
    hb = hambot('hambot')
    hb.connect('irc.synirc.org', channel = '(channel name removed)')
    hb.start()

if __name__ == '__main__': main()

这是我运行它时得到的结果。第一个异常只引用了一个名为asynchat.py的脚本,它似乎是Python本身的一部分,而不是IRCUtils包的一部分,因此我对可能出现的问题有点茫然。在

^{pr2}$

StackOverflow上已经有一个问题与此错误消息有关,但公认的答案是,在这种情况下,它与一个名为“gevent”的包有关,据我所知,它甚至没有安装在我的机器上,因此我认为它与此无关。在


Tags: nameself脚本eventmessageifmaindef
1条回答
网友
1楼 · 发布于 2024-09-30 06:28:08

这个问题的出现是因为改变了python3中字符串的工作方式。以下错误可能与此相关:http://bugs.python.org/issue12523

IRCUtils库的工作方式如下:除了运行2to3脚本外,对connection.py进行以下更改:

Line 31: change from
    self.set_terminator("\r\n")
to
    self.set_terminator(b"\r\n")

Line 63: change from
    data = "".join(self.incoming)
to
    data = "".join([x.decode('utf8', 'replace') for x in self.incoming])

Line 96: change from
    self.push("%s %s\r\n" % (command.upper(), " ".join(params)))
to
    self.push(bytes("%s %s\r\n" % (command.upper(), " ".join(params)), 'utf8'))

相关问题 更多 >

    热门问题