Python错误:参数1必须是缓冲区或字节而不是str

时间:2011-02-28 01:39:44

标签: python networking irc bots

程序很简单,它意味着连接到IRC房间。问题是,当我尝试将我的机器人连接到它时,它会给我标题中的错误。我不确定他们想要什么而不是字符串。我不确定缓冲区或字节是指什么。其他人已经使这个脚本工作,但它不适合我。注意:这不是一个恶意的irc机器人或其他什么。这只是一个基本网络的练习。

import socket

network = 'irc.rizon.net'
port = 6667
irc = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
irc.connect((network,port))

irc.send("NICK PyBot\r\n")
irc.send("USER Pybot Pybot Pybot : Python IRC\r\n")
irc.send("JOIN #pychat\r\n")
irc.send("PART #pychat\r\n")
irc.send("QUITE\r\n")
irc.close()

2 个答案:

答案 0 :(得分:2)

你正在使用Python 3,而脚本是为Python 2编写的。快速修复是通过在它们之前添加b来使字符串文字字节文字:

irc.sendall(b"NICK PyBot\r\n")
irc.sendall(b"USER Pybot Pybot Pybot : Python IRC\r\n")
irc.sendall(b"JOIN #pychat\r\n")
irc.sendall(b"PART #pychat\r\n")
irc.sendall(b"QUITE\r\n")

在Python 3中,str是一系列字符。 bytes是一个很好的字节序列。

编辑:我认为Jean指的是socket.send无法保证发送所有字节的事实。 的快速解决方法是使用sendall

答案 1 :(得分:1)

假设您使用的是Python 3.x:

您必须通过套接字发送bytes,而不是str

irc.send(b"NICK PyBot\r\n")

有关bytesstr的详细解释,请参阅Dive Into Python 3的Strings chapter