Maison >développement back-end >Tutoriel Python >Comment convertir en toute sécurité des représentations sous forme de chaîne de dictionnaires en dictionnaires en Python ?

Comment convertir en toute sécurité des représentations sous forme de chaîne de dictionnaires en dictionnaires en Python ?

DDD
DDDoriginal
2024-12-26 10:22:09331parcourir

How to Safely Convert String Representations of Dictionaries to Dictionaries in Python?

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

Considérez la tâche de conversion d'une représentation sous forme de chaîne d'un dictionnaire en dictionnaire. Par exemple :

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

On peut être tenté d'utiliser la fonction eval à cet effet, mais il est préférable d'éviter eval en raison de ses risques potentiels de sécurité.

Pensez plutôt à utiliser la Fonction ast.literal_eval fournie par la bibliothèque standard de Python :

import ast

dictionary = ast.literal_eval(s)

La fonction ast.literal_eval évalue une chaîne en toute sécurité contenant une expression Python. Elle autorise uniquement les structures littérales telles que les chaînes, les nombres, les tuples, les listes, les dictionnaires, les booléens et None, garantissant que l'expression peut être évaluée en toute sécurité.

Cette méthode est plus sûre que l'utilisation de eval, car elle empêche l'exécution. de code arbitraire qui pourrait potentiellement compromettre votre système. Par exemple :

# Dangerous example:
eval("shutil.rmtree('mongo')")

# Safe example:
ast.literal_eval("shutil.rmtree('mongo')")

Dans le premier exemple, eval exécute la chaîne en tant que code Python, ce qui entraîne une erreur car mongo n'est pas un répertoire valide. Dans le deuxième exemple, ast.literal_eval évalue en toute sécurité la chaîne en tant qu'expression littérale et génère une erreur indiquant que la chaîne est mal formée.

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