Corriger l'erreur Bytes-Like Object Is Required Not STR en Python

Manav Narula 12 avril 2022
Corriger l'erreur Bytes-Like Object Is Required Not STR en Python

Ce tutoriel discutera de l’erreur a bytes-like object is required, not 'str' en Python, et des moyens de le corriger. Cette TypeError indique quand une opération invalide est effectuée sur le mauvais type de données.

Nous discuterons des objets chaîne et octets en Python. Les chaînes sont une collection de caractères, alors que ces dernières sont une suite d’octets, aussi appelés objets Unicode. En Python3, toutes les chaînes sont des objets Unicode par défaut. En Python 2, nous pouvons convertir des chaînes en Unicode et vice-versa en utilisant les fonctions encode et decode.

Nous obtenons cette erreur lorsque nous travaillons avec un objet bytes mais que nous le traitons comme une chaîne. C’est courant en raison du changement de ces objets dans Python 2 et Python 3. Nous obtenons cette erreur lorsque nous travaillons avec un fichier binaire et le traitons comme une chaîne.

Par example:

with open("myfile.txt", "rb") as f:
    a = f.read()
    print(type(a))
    a.split(";")

Production :

TypeError: a bytes-like object is required, not 'str'

Dans l’exemple ci-dessus, nous lisons un fichier en mode rb. Ce mode signifie la lecture d’un fichier binaire. Le contenu de celui-ci est en octets et stocké dans la variable a, et nous affichons le type.

Lorsque nous appliquons la fonction split() à cette variable, nous obtenons l’erreur a bytes-like object is required, not 'str'. C’est parce que la fonction split() fonctionne avec des objets de type chaîne.

Pour éviter cette erreur, faites attention au type de lecture de données et à ses opérations. Nous pouvons également corriger cette erreur en convertissant l’objet de type octet en chaîne à l’aide de la fonction str().

Par example:

with open("myfile.txt", "rb") as f:
    a = str(f.read())
    print(type(a))
    s = a.split(";")

Production :

<class 'str'>

Le str() convertit l’objet en une chaîne pour utiliser la fonction split().

Cette erreur est également fréquente lorsque vous travaillez avec des sockets et que vous envoyez ou recevez des données. Nous pouvons utiliser le caractère b avant une chaîne pour envoyer des octets ou la fonction encode() avec le paramètre utf-8.

Par example:

data = b"result"
s.sendall(data)
Auteur: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

Article connexe - Python String

Article connexe - Python Error