Heim >Backend-Entwicklung >Python-Tutorial >Wie kann man String-Darstellungen von Wörterbüchern in Python sicher in Wörterbücher konvertieren?

Wie kann man String-Darstellungen von Wörterbüchern in Python sicher in Wörterbücher konvertieren?

DDD
DDDOriginal
2024-12-26 10:22:09291Durchsuche

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

Konvertieren von Zeichenfolgendarstellungen von Wörterbüchern in Wörterbücher

Betrachten Sie die Aufgabe, eine Zeichenfolgendarstellung eines Wörterbuchs in ein Wörterbuch umzuwandeln. Zum Beispiel:

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

Man könnte versucht sein, die Eval-Funktion für diesen Zweck zu verwenden, aber es ist aufgrund der potenziellen Sicherheitsrisiken besser, Eval zu vermeiden.

Erwägen Sie stattdessen die Verwendung von Funktion ast.literal_eval, bereitgestellt von der Standardbibliothek von Python:

import ast

dictionary = ast.literal_eval(s)

Die Funktion ast.literal_eval wertet einen String sicher aus enthält einen Python-Ausdruck. Es sind nur Literalstrukturen wie Zeichenfolgen, Zahlen, Tupel, Listen, Wörterbücher, Boolesche Werte und Keine zulässig, wodurch sichergestellt wird, dass der Ausdruck sicher ausgewertet werden kann.

Diese Methode ist sicherer als die Verwendung von eval, da sie die Ausführung verhindert von willkürlichem Code, der möglicherweise Ihr System gefährden könnte. Zum Beispiel:

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

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

Im ersten Beispiel führt eval die Zeichenfolge als Python-Code aus, was zu einem Fehler führt, da mongo kein gültiges Verzeichnis ist. Im zweiten Beispiel wertet ast.literal_eval die Zeichenfolge sicher als Literalausdruck aus und löst einen Fehler aus, der darauf hinweist, dass die Zeichenfolge fehlerhaft ist.

Das obige ist der detaillierte Inhalt vonWie kann man String-Darstellungen von Wörterbüchern in Python sicher in Wörterbücher konvertieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn