只能将 str (不是“字节”)连接到 str

Posted

技术标签:

【中文标题】只能将 str (不是“字节”)连接到 str【英文标题】:can only concatenate str (not "bytes") to str 【发布时间】:2021-11-07 07:34:17 【问题描述】:
import socket
import os

user_url = input("Enter url: ")

host_name = user_url.split("/")[2]
mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysock.connect((host_name, 80))
cmd = 'GET ' + user_url + ' HTTP/1.0\r\n\r\n'.encode()
mysock.send(cmd)

while True:
    data = mysock.recv(512)
    if len(data) < 1:
        break
     print(data.decode(),end='\n')

mysock.close()

由于某种原因,我遇到了这个错误

输入网址:http://data.pr4e.org/romeo.txt

 7 mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 8 mysock.connect((host_name, 80))
 9 cmd = 'GET ' + user_url + ' HTTP/1.0\r\n\r\n'.encode()
 TypeError: can only concatenate str (not "bytes") to str

任何想法我做错了什么?编码和解码对我来说似乎是正确的,我已经在 .encode() 之前使用 \n 进行了传输。 这是为了上课

【问题讨论】:

我在同一个问题中遇到了同样的问题!谢谢你的问题freecodecamp.org/learn/scientific-computing-with-python/… 【参考方案1】:

问题是您在连接之前进行编码:

'GET ' + user_url + ' HTTP/1.0\r\n\r\n'.encode()

你必须先连接,然后编码整个东西:

('GET ' + user_url + ' HTTP/1.0\r\n\r\n').encode()

【讨论】:

【参考方案2】:

str 是 Unicode 代码点的抽象序列; bytes 是一个 8 位数字序列。 Python 3 非常清楚地区分了两者,并且不允许您将它们隐式组合。 str 可能有多个有效编码,bytes 对象可能有效 Unicode 字符串的编码。 (或者,bytes 可能是多个不同 str 对象的编码,具体取决于用于创建它的编码。)

'GET 'user_urlstr 对象,而 ' HTTP/1.0\r\n\r\n'.encode()bytes 对象。您想对整个连接的字符串进行编码。

cmd = 'GET  HTTP/1.0\r\n\r\n'.format(user_url).encode()

或者写成更清楚地显示步骤,

cmd = 'GET  HTTP/1.0\r\n\r\n'.format(user_url)  # still a str
mysock.send(cmd.encode())  # send the encoding of the str

【讨论】:

嗯,这不起作用....之前:错误:TypeError: can only concatenate str (not "bytes") to str 使用此代码:cmd.send(output + output_error) 和@chepner 的解决方案我有此代码:cmd.send(output.encode() + output_error.encode())。但后来我得到这个错误:AttributeError: 'bytes' object has no attribute 'encode'.

以上是关于只能将 str (不是“字节”)连接到 str的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:只能将列表(不是“str”)连接到列表 -

Pandas TypeError:只能将str(不是“int”)连接到str

TypeError:在使用 Python 进行网络抓取时,只能将 str(而不是“列表”)连接到 str 错误

AWS s3bucket“只能将str(不是“NoneType”)连接到str”

解决 TypeError:只能将元组(不是“str”)连接到元组

TypeError:无法将字节连接到 str。 Pycrypto Aes 加密