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!