只能将 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_url
是 str
对象,而 ' 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”