Python错误:参数1必须是缓冲区或字节,不是字符串
这个程序很简单,它的目的是连接到一个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 个回答
1
假设你在使用 Python 3.x:
你需要通过套接字发送 bytes
(字节),而不是 str
(字符串)。
irc.send(b"NICK PyBot\r\n")
想要更好地理解 bytes
和 str
的区别,可以看看 Dive Into Python 3 里的字符串章节。
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
。