Maison >développement back-end >Tutoriel Python >Comment puis-je convertir en toute sécurité une représentation sous forme de chaîne d'un dictionnaire en dictionnaire en Python ?

Comment puis-je convertir en toute sécurité une représentation sous forme de chaîne d'un dictionnaire en dictionnaire en Python ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-23 12:11:19458parcourir

How Can I Safely Convert a String Representation of a Dictionary to a Dictionary in Python?

Conversion de représentations sous forme de chaîne de dictionnaires en dictionnaires

En Python, il est souvent souhaitable de convertir des représentations sous forme de chaîne de dictionnaires, telles que la représentation sous forme de chaîne ci-dessous , dans leurs dictionnaires correspondants :

s = "{'muffin' : 'lolz', 'foo' : 'kitty'}"

Éviter d'utiliser 'eval'

Bien qu'il soit possible d'utiliser la fonction 'eval' pour évaluer l'expression de chaîne, cette méthode est déconseillée pour des raisons de sécurité. 'eval' exécute n'importe quel code arbitraire, augmentant le risque de vulnérabilités.

Alternatives plus sûres

Pour convertir en toute sécurité les dictionnaires de chaînes, pensez à utiliser l'ast.literal_eval intégré ' fonction. 'ast.literal_eval' est spécifiquement conçu pour évaluer les expressions Python littérales, telles que la représentation sous forme de chaîne de dictionnaires, de tuples, de listes, etc.

Exemple

import ast
ast.literal_eval("{'muffin' : 'lolz', 'foo' : 'kitty'}")

Sortie :

{'muffin': 'lolz', 'foo': 'kitty'}

Avantages de 'ast.literal_eval'

  • Sécurité : il évalue uniquement les expressions littérales, empêchant ainsi l'exécution de code malveillant.
  • Polyvalence : il peut évaluer non seulement des dictionnaires mais également des listes, des tuples, et d'autres structures littérales Python.

En comparaison avec « eval », 'ast.literal_eval' fournit un moyen plus sûr et plus contrôlé de convertir des représentations sous forme de chaîne de dictionnaires ou d'autres littéraux en objets Python.

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