Python TypeError:需要类似字节的对象,而不是';str';写入文件时
当我运行此代码时,行Python TypeError:需要类似字节的对象,而不是';str';写入文件时,python,python-3.x,sockets,Python,Python 3.x,Sockets,当我运行此代码时,行s.sendto(消息,服务器)会导致TypeError:需要类似字节的对象,而不是'str' 如何解决此类问题?我尝试搜索internet,但找不到解决方案。套接字读取和写入字节,而不是字符串(这通常是套接字的属性,不是特定于python的实现选择)。这就是错误的原因 字符串有一个encode()方法将它们转换为字节对象。因此,不要将my_text写入套接字,而是将my_text.encode()写入套接字 类似地,当您读取套接字时,会得到一个类似字节的对象,您可以在该对象
s.sendto(消息,服务器)
会导致TypeError:需要类似字节的对象,而不是'str'
如何解决此类问题?我尝试搜索internet,但找不到解决方案。套接字读取和写入字节,而不是字符串(这通常是套接字的属性,不是特定于python的实现选择)。这就是错误的原因 字符串有一个
encode()
方法将它们转换为字节对象。因此,不要将my_text
写入套接字,而是将my_text.encode()
写入套接字
类似地,当您读取套接字时,会得到一个类似字节的对象,您可以在该对象上调用
input\u message.decode()
,将其转换为字符串套接字读取和写入字节,而不是字符串(这通常是套接字的属性,不是特定于python的实现选择)。这就是错误的原因
字符串有一个encode()
方法将它们转换为字节对象。因此,不要将my_text
写入套接字,而是将my_text.encode()
写入套接字
类似地,当您读取套接字时,会得到一个类似字节的对象,您可以在该对象上调用
input\u message.decode()
将其转换为字符串错误是因为您没有对消息进行编码。
只要改变一下:
import socket
def Main():
host = '127.0.0.1'
port = 5001
server = ('127.0.0.1',5000)
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind((host, port))
message = input("-> ")
while message != 'q':
s.sendto (message, server)
data, addr = s.recvfrom(1024)
print ('Received from server: ' + (data))
message = input("-> ")
s.close()
if __name__ == '__main__':
Main()
到
在你的代码中
示例:
c.sendto(message.encode(), server)
这将导致错误消息:
为了解决这个问题,我们需要改变:
c.send(message)
TypeError: a bytes-like object is required, not 'str'
到
错误是由于您没有对消息进行编码。 只要改变一下:
import socket
def Main():
host = '127.0.0.1'
port = 5001
server = ('127.0.0.1',5000)
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind((host, port))
message = input("-> ")
while message != 'q':
s.sendto (message, server)
data, addr = s.recvfrom(1024)
print ('Received from server: ' + (data))
message = input("-> ")
s.close()
if __name__ == '__main__':
Main()
到
在你的代码中
示例:
c.sendto(message.encode(), server)
这将导致错误消息:
为了解决这个问题,我们需要改变:
c.send(message)
TypeError: a bytes-like object is required, not 'str'
到
@scraappy可能重复,这不是一个好的重复目标;所有答案都建议将
b
前置到字符串,但在本例中,字符串来自用户输入,因此不可能前置。显式编码无论如何都更好-如果字符串包含非ascii字符,则前置b
将不起作用;所有答案都建议将b
前置到字符串,但在本例中,字符串来自用户输入,因此不可能前置。显式编码无论如何都会更好-如果字符串包含非ascii字符,则前置b
将不起作用。感谢您的帮助我按照您所说的做了,它解决了问题problem@Firaga:谢谢,如果答案能解决问题,请接受。谢谢你的帮助。我照你说的做了,它解决了问题problem@Firaga:谢谢,如果答案能解决问题,请接受
c.send(message.encode())