Heim > Backend-Entwicklung > Python-Tutorial > Warum erhalte ich in der Python-Socket-Programmierung \'TypeError: a bytes-like object is needed, not \'str\'\'?

Warum erhalte ich in der Python-Socket-Programmierung \'TypeError: a bytes-like object is needed, not \'str\'\'?

Susan Sarandon
Freigeben: 2024-10-29 13:15:29
Original
281 Leute haben es durchsucht

 Why Do I Get

Umgang mit TypeError: Es ist ein Byte-ähnliches Objekt erforderlich, nicht „str“ in der Socket-Programmierung

Bei der Verwendung von Sockets für Eingabe-/Ausgabeoperationen in Python ist dies möglich Es tritt der folgende Fehler auf:

TypeError: a bytes-like object is required, not 'str'
Nach dem Login kopieren

Dieser Fehler tritt auf, wenn versucht wird, ein Zeichenfolgenobjekt an eine Funktion zu übergeben, die ein byteähnliches Objekt erwartet. Ein häufiges Szenario, in dem dieser Fehler auftritt, ist das Senden von Daten über UDP-Sockets.

Betrachten wir den folgenden Python-Code:

from socket import *

serverName = '127.0.0.1'
serverPort = 12000
clientSocket = socket(AF_INET, SOCK_DGRAM)
message = input('Input lowercase sentence:')
clientSocket.sendto(message,(serverName, serverPort))
modifiedMessage, serverAddress = clientSocket.recvfrom(2048)
print (modifiedMessage)
clientSocket.close()
Nach dem Login kopieren

Wenn Sie versuchen, diesen Code auszuführen, kann dies passieren Es tritt der oben genannte Fehler auf, wenn Sie eine Zeichenfolge als Eingabe eingeben. Die sendto-Funktion erwartet ein byteähnliches Objekt, z. B. Bytes oder ein Bytearray, anstelle einer Zeichenfolge.

Lösung:

Um dieses Problem zu beheben, sollte die Eingabe erfolgen in ein Byte-ähnliches Objekt konvertiert werden, bevor es über den Socket gesendet wird. Dies kann durch die Verwendung der encode()-Methode erreicht werden, wie unten gezeigt:

<code class="python">clientSocket.sendto(message.encode(),(serverName, serverPort))</code>
Nach dem Login kopieren

Mit dieser Änderung sendet der Code korrekt ein byteähnliches Objekt über den UDP-Socket und löst so den TypeError.

Das obige ist der detaillierte Inhalt vonWarum erhalte ich in der Python-Socket-Programmierung \'TypeError: a bytes-like object is needed, not \'str\'\'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage