Heim  >  Artikel  >  Backend-Entwicklung  >  Einführung in die Unterschiede zwischen der Verwendung der Funktion eval und ast.literal_eval in Python (Bild und Text)

Einführung in die Unterschiede zwischen der Verwendung der Funktion eval und ast.literal_eval in Python (Bild und Text)

黄舟
黄舟Original
2017-08-10 14:00:0211018Durchsuche

Die Auswertungsfunktion ist immer noch sehr nützlich für die Konvertierung von Datentypen in Python. Seine Funktion besteht darin, die Daten in sich selbst oder in einen Datentyp wiederherzustellen, der in sie konvertiert werden kann. Was ist also der Unterschied zwischen eval und ast.literal_val()? In diesem Artikel erhalten Sie relevante Informationen zum Unterschied zwischen den Funktionen eval und ast.literal_eval in Python. Freunde in Not können darauf zurückgreifen.

Vorwort

Wie wir alle wissen, was ist, wenn Sie in Python Zeichenfolgenlisten, Tupel und Diktate in den Originaltyp konvertieren möchten? Zu diesem Zeitpunkt werden Sie natürlich an eval denken. Die eval-Funktion ist immer noch sehr nützlich für die Konvertierung von Datentypen in Python. Seine Funktion besteht darin, die Daten in sich selbst oder in einen Datentyp wiederherzustellen, der in ihn konvertiert werden kann:

string <==> 🎜>

String <==> Tupel

String <= => dict

Das heißt, die Verwendung von eval kann die Konvertierung von Grundelementen, Listen und wörterbuchartigen Zeichenfolgen in Grundelemente und Listen realisieren , und Wörterbücher Darüber hinaus kann eval auch die Eingabe des Zeichenkettentyps

direkt berechnen. Beispielsweise berechnet sie direkt das Ergebnis der Berechnungszeichenfolge „1+1“.

Aus der obigen Sicht ist die Eval-Funktion sehr leistungsfähig, das heißt, sie kann eine Typkonvertierung zwischen String und Liste, Tupel, Diktat durchführen und kann auch sein als Taschenrechner verwendet! Darüber hinaus kann sie alle Zeichenfolgen verarbeiten, die sie analysieren kann, unabhängig von den möglichen Konsequenzen! Hinter der Leistungsfähigkeit von eval steckt also ein großes Sicherheitsrisiko! ! ! Beispielsweise gibt der Benutzer in böswilliger Absicht die folgende Zeichenfolge ein:


open(r'D://filename.txt', 'r').read()

__import__('os').system('dir')

__import__('os').system('rm -rf /etc/*')

Dann ignoriert eval alles, zeigt die Verzeichnisstruktur Ihres Computers an, liest Dateien, löscht Dateien ... Wenn es sich um einen schwerwiegenderen Vorgang wie das Formatieren der Festplatte handelt, wird sie es auch tun! ! !

Das führt also zu einer weiteren sicheren Verarbeitungsmethode ast.literal_eval. Sie können zuerst Stackoverflow und die offiziellen Erklärungen von Python dazu lesen!

Stackoverflow

Offizielle Python-Dokumentation

Um es einfach auszudrücken: Das Ast-Modul hilft Python-Anwendungen bei der Analyse abstrakter Grammatik. Die Funktion

in diesem Modul bestimmt nach der Berechnung, ob der zu berechnende Inhalt ein zulässiger Python-Typ ist. Wenn ja, wird der Vorgang ausgeführt, andernfalls wird der Vorgang nicht ausgeführt. literal_eval()

Wenn beispielsweise die oben genannten Berechnungsoperationen und gefährlichen Operationen durch

ersetzt werden, wird ihnen die Ausführung verweigert. ast.literal_eval()

Wertfehler, ungültige Zeichenfolge!

Nur ​​legale Python-Typen werden ausgeführt, wodurch das Risiko des Systems erheblich reduziert wird!

Also aus Sicherheitsgründen verwenden Sie bei der Konvertierung von String-Typen am besten die Funktion

ast.literal_eval()

Zusammenfassung

Das obige ist der detaillierte Inhalt vonEinführung in die Unterschiede zwischen der Verwendung der Funktion eval und ast.literal_eval in Python (Bild und Text). 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