首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Python错误:参数%1必须是缓冲区或字节不是字符串

Python错误:参数%1必须是缓冲区或字节不是字符串
EN

Stack Overflow用户
提问于 2011-02-28 01:39:44
回答 2查看 1.7K关注 0票数 1

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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()
EN

回答 2

Stack Overflow用户

发布于 2011-02-28 01:44:19

您使用的是Python3,而脚本是为Python2编写的。快速解决方法是通过在字符串字面值字节之前添加一个b来使它们成为字面值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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")

在Python3中,str是一个字符序列。bytes是一个字节序列。

编辑:我认为Jean指的是socket.send不能保证发送所有字节的事实。解决这个问题的捷径是使用sendall

票数 2
EN

Stack Overflow用户

发布于 2011-02-28 01:45:23

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
irc.send(b"NICK PyBot\r\n")

要很好地解释bytesstr的区别,请参阅Dive Into Python3的Strings chapter

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5137433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文