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

Susan Sarandon
Libérer: 2024-10-29 13:15:29
original
268 Les gens l'ont consulté

 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'
Copier après la connexion

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()
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal