Verwenden Sie eval () von Python im Vergleich zu ast.literal_eval ()?

Ich habe eine Situation mit einem Code, in dereval() kam als mögliche Lösung. Jetzt musste ich noch nie benutzeneval() Zuvor war ich jedoch auf zahlreiche Informationen über die potenzielle Gefahr gestoßen, die dadurch entstehen kann. Das heißt, ich bin sehr vorsichtig bei der Verwendung.

Meine Situation ist, dass ich Eingaben von einem Benutzer erhalten habe:

datamap = raw_input('Provide some data here: ')

Woherdatamap muss ein Wörterbuch sein. Ich habe mich umgesehen und das gefundeneval() könnte das klären. Ich dachte, ich könnte den Typ der Eingabe überprüfen, bevor ich versuche, die Daten zu verwenden, und das wäre eine praktikable Sicherheitsmaßnahme.

datamap = eval(raw_input('Provide some data here: ')
if not isinstance(datamap, dict):
    return

Ich habe die Dokumente durchgelesen und bin mir immer noch unklar, ob dies sicher wäre oder nicht. Wertet eval die Daten aus, sobald sie eingegeben wurden oder nach demdatamap Variable heißt?

Ist derast Module.literal_eval() die einzig sichere möglichkeit?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage