Maison >développement back-end >Tutoriel Python >Pourquoi est-ce que j'obtiens \'TypeError : un objet de type octets est requis, pas \'str\'\' dans la programmation Python Socket ?
Lors de l'utilisation de sockets pour les opérations d'entrée/sortie en Python, il est possible de rencontrez l'erreur suivante :
TypeError: a bytes-like object is required, not 'str'
Cette erreur se produit lorsque vous essayez de transmettre un objet chaîne à une fonction attendant un objet de type octets. Un scénario courant dans lequel cette erreur se produit est dans le contexte de l'envoi de données via des sockets UDP.
Considérons le code Python suivant :
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()
Lorsque vous essayez d'exécuter ce code, vous pouvez rencontrez l’erreur susmentionnée si vous entrez une chaîne en entrée. La fonction sendto attend un objet de type octets, tel que des octets ou un bytearray, plutôt qu'une chaîne.
Solution :
Pour résoudre ce problème, l'entrée doit être converti en un objet de type octet avant de l'envoyer via le socket. Ceci peut être réalisé en utilisant la méthode encode(), comme indiqué ci-dessous :
<code class="python">clientSocket.sendto(message.encode(),(serverName, serverPort))</code>
Avec cette modification, le code envoie correctement un objet de type octet sur le socket UDP, résolvant ainsi l'erreur TypeError.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!