chaîne Python en octets

Vous devez fournir une chaaîne à la bibliothèque re si vous souhaitez manipuler un objet à l’aide d’un modèle de chaaîne. Si vous essayez d’utiliser un modèle de chaaîne sur un objet qui est stocké à l’aide des "octets‚" type de données, vous rencontrerez la "TypeError : impossible d’utiliser un modèle de chaaîne sur un objet de type octets‚" error.

Ce guide explique ce que signifie cette erreur et pourquoi vous pouvez la rencontrer. Nous allons vous présenter un exemple de cette erreur afin que vous puissiez voir les étapes à suivre pour résoudre l’erreur.

TypeError : impossible d’utiliser un modèle de chaaîne sur un objet de type octets

Les objets Octets contiennent une séquence d’octets simples. Ils sont immuables, comme les chaaînes, ce qui signifie qu’ils ne peuvent pas être modifiés. Un objet bytes est généralement renvoyé lorsque vous lisez un fichier binaire ou lorsque vous utilisez une bibliothèque telle que "request‚" pour récupérer des données d’un site Web.

Lorsque vous utilisez la bibliothèque re, vous devez travailler soit avec des octets, soit avec des objets. Vous ne pouvez pas spécifier de modèles de chaaîne pour un objet d’octets, et vice versa.

Si vous travaillez avec des données d’octets, votre programme doit spécifier un modèle d’expression régulière en octets. Si vous utilisez des expressions régulières avec des chaaînes, fournissez un modèle d’expression régulière basé sur des chaaînes.

Un exemple de scénario

Nous allons écrire un programme qui récupère le titre d’une page Web. Nous travaillons avec le site Python.Engineering pour ce tutoriel.

Pour commencer, importe les deux bibliothèques dont nous aurons besoin pour construire notre programme : urllib et re.

La bibliothèque urllib nous permet de faire des requêtes Web et la bibliothèque re nous donne la possibilité d’utiliser regex dans notre programme.

81 % des participants ont déclaré qu’ils se sentaient plus confiants quant à leurs perspectives d’emploi en technologie après avoir assisté à un bootcamp. Soyez jumelé à un bootcamp aujourd’hui.

Le diplômé moyen d’un bootcamp a passé moins de six mois en transition de carrière, du démarrage d’un bootcamp à la recherche de son premier emploi.

Ensuite, nous faisons un demande Web à la page d’accueil de Python.Engineering :

Le programme récupère le contenu de la page d’accueil de Python.Engineering. Ces données sont lues à l’aide de la méthode read() qui fait partie de la méthode urlopen(). Nous stockons ces données dans la "res‚" variable.

Maintenant que nous avons les données de notre programme, utilisez la méthode search() pour connaaître le contenu de la balise sur la page Web que nous avons interrogée. La balise contient le titre d’une page Web.<br></p> <p>Pour trouver le titre de la page Web, utilisez la méthode <code>re.search()</code> :<br></p > <p>Notre programme recherchera le contenu de la balise <title>. Notre programme imprime ensuite le titre de la page Web sur la console. Nous utilisons la <a href="/python-f-string/">méthode .format()</a> pour ajouter ce titre dans notre chaaîne. <br></p> <p>Exécutons notre programme et voyons s’il fonctionne :<br></p> <p>Notre programme ne s’exécute pas complètement.</p><p>La valeur de "home‚" (la réponse de notre page Web) est un objet d’octets, mais le modèle que nous utilisons pour trouver le titre d’une page Web est une chaaîne. Cela provoque une erreur car nous ne pouvons pas faire correspondre les modèles de chaaîne avec les objets octets.<br></p> <p>Il existe deux manières de résoudre ce problème.</p> <h3>Solution 1 : Convertir le modèle de chaaîne en octets ;</h3> <p>Nous devons convertir le modèle de chaaîne que nous utilisons en un objet bytes. Nous pouvons le faire en utilisant soit le "b‚" mot-clé ou la méthode <code>bytes()</code> :<br></p> <p>La première méthode d’utilisation du "b‚" mot-clé est plus courant car il est plus facile à lire. Maintenant que nous avons converti notre modèle de chaaîne en octets, nous pouvons exécuter notre code :<br></p> <p>Notre code renvoie le texte qui correspond à notre requête.<br> </p> </a></div><p>Maintenant que nous avons la réponse regex, nous pouvons l’analyser afin qu’elle apparaisse simplement comme une chaaîne dans notre code. L’analyse des données regex sort du cadre de ce didacticiel. </p> <h3>Solution n¬∞2 : décoder les données de la page Web</h3> <p>Alternativement, nous pourrions choisir de décoder les données de notre page Web pour en faire une chaaîne. Ceci est utile si vous attendez une chaaîne pour d’autres parties de votre code pour fonctionner.<br></p> <p>Nous pouvons décoder les données de notre page Web en modifiant la ligne de code o√π nous ouvrons la page Web :<br></p> <p>Ce code décodera la réponse de notre requête Web afin que nous puissions traiter la réponse comme une chaaîne. Vous devez remplacer "utf-8‚" par la méthode de e ncoder la page Web que vous demandez utilise.<br></p> <p>Nous pouvons ensuite utiliser un modèle de chaaîne pour rechercher la balise de titre. Il n’est pas nécessaire de convertir notre modèle en objet bytes car "home‚" sera une valeur de chaaîne.</p> <p>Exécutons notre code et voyons ce qui se passe : <br></p><p>"Carrière Karma est entrée dans ma vie au moment o√π j’en avais le plus besoin et m’a rapidement aidé à suivre un bootcamp. Deux mois après l’obtention de mon diplôme, j’ai trouvé l’emploi de mes rêves qui correspondait à mes valeurs et objectifs dans la vie !"</p> <p class="testimonial-section-faint-1">Venus, ingénieur logiciel chez Rockbot</p> <p>La "TypeError : ne peut pas utiliser un modèle de chaaîne sur un octet -comme un objet " une erreur est générée lorsque vous essayez de faire correspondre un modèle de chaaîne à un objet stocké à l’aide du type de données bytes.<br></p> <p>Vous pouvez corriger cette erreur soit en convertissant votre modèle de chaaîne en objet bytes, soit en convertissant les données avec lesquelles vous travaillez en un objet chaaîne.<br></p> </a></div><p>Vous êtes maintenant prêt à corriger cette <a href="/how-long-to-learn-python/">erreur Python comme un pro</a> !</p>