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
Susan SarandonOriginal
2024-10-29 13:15:29315Durchsuche

 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'

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()

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>

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!

Stellungnahme:
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