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 ?

Pourquoi est-ce que j'obtiens \'TypeError : un objet de type octets est requis, pas \'str\'\' dans la programmation Python Socket ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-29 13:15:29315parcourir

 Why Do I Get

Gestion de TypeError : un objet de type octets est requis, pas 'str' dans la programmation 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn