Python 3.8 TypeError: can't concat str to bytes - TypeError: a bytes-like object is required, not 's

Posted

技术标签:

【中文标题】Python 3.8 TypeError: can\'t concat str to bytes - TypeError: a bytes-like object is required, not \'str\'【英文标题】:Python 3.8 TypeError: can't concat str to bytes - TypeError: a bytes-like object is required, not 'str'Python 3.8 TypeError: can't concat str to bytes - TypeError: a bytes-like object is required, not 'str' 【发布时间】:2020-08-13 16:57:54 【问题描述】:

对编码非常陌生。这是我试图运行的初始代码,但发现它与 python 3 不兼容,因为它处理字符串和字节的方式。

def opensocket():
     s = socket.socket()
     s.connect((HOST,PORT))
     s.send("PASS " + PASS + "\r\n")
     s.send("NICK " + IDENT + "\r\n")
     s.send("JOIN #" + CHANNEL + "\r\n")
     return s

我认为我需要将这些字符串编码为字节,但我尝试过的所有转换方法都给出了错误。这是我尝试过的一些。

def opensocket():
     s = socket.socket()
     s.connect((HOST,PORT))
     s.send(b"PASS " + PASS + "\r\n")
     s.send(b"NICK " + IDENT + "\r\n")
     s.send(b"JOIN #" + CHANNEL + "\r\n")

def opensocket():
     s = socket.socket()
     s.connect((HOST,PORT))
     s.send("PASS " + PASS + "\r\n".encode())
     s.send("NICK " + IDENT + "\r\n".encode())
     s.send("JOIN #" + CHANNEL + "\r\n".encode())
     return s

这两个都给出错误说 str 不能连接成字节 有什么帮助吗?

编辑:浏览了建议的帖子,但我没有从中获得任何收获。它看起来很不一样,我对此很陌生,我什至无法分辨他试图转换的字符串在哪里

【问题讨论】:

PASS、IDENT、CHANNEL的类型是什么?让它使用 type(PASS) 这能回答你的问题吗? How to convert a String to Bytearray @M-Chen-3:那篇文章在这里无关紧要,因为它是针对 C# 的。 OP 的问题在于 Python。 @Basil 好的,谢谢你告诉我。 【参考方案1】:

如果PASSIDENTCHANNELbytes

def opensocket():
     s = socket.socket()
     s.connect((HOST,PORT))
     s.send(b"PASS " + PASS + b"\r\n")
     s.send(b"NICK " + IDENT + b"\r\n")
     s.send(b"JOIN #" + CHANNEL + b"\r\n")

如果PASSIDENTCHANNELstr

def opensocket():
     s = socket.socket()
     s.connect((HOST,PORT))
     s.send(b"PASS " + PASS.encode('ascii') + b"\r\n")
     s.send(b"NICK " + IDENT.encode('ascii') + b"\r\n")
     s.send(b"JOIN #" + CHANNEL.encode('ascii') + b"\r\n")

了解您使用的协议以及实际使用的编码非常重要。 'ascii' 是一个安全的选择,但这意味着你只能使用 ASCII 字符,所以如果协议实际上指定了 UTF-8 字符串,你应该改用 .encode('utf-8')

【讨论】:

以上是关于Python 3.8 TypeError: can't concat str to bytes - TypeError: a bytes-like object is required, not 's的主要内容,如果未能解决你的问题,请参考以下文章

成功解决TypeError: only size-1 arrays can be converted to Python scalars

无法从子进程访问内存映射(Python 3.8)

如何在 Python 3.8 中为 asyncio.gather 构建任务列表

无法在 python 3.8 中访问嵌套的 JSON

TypeError:无法腌制 dict_items 对象

在 python 3.8 中出现异常的 show_most_informative_features() 错误