ast.literal_eval
funktioniert gut Pythons eingebauten Typen zur Bewertung:`ast.literal_eval` Äquivalent für Objekte benutzerdefinierte Klasse?
In [42]: import ast
In [43]: ast.literal_eval('[1, 2, 3, "4", None, (5, 4, 3)]')
Out[43]: [1, 2, 3, '4', None, (5, 4, 3)]
Es ist für benutzerdefinierte Klasse Objekte versagt:
In [44]: class Foo():
...: def __init__(self, val):
...: self.val = val
...:
In [45]: ast.literal_eval('[Foo(1), Foo(2), Foo(3)]')
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-47-a3bd4f494d5d> in <module>()
----> 1 ast.literal_eval('[Foo(1), Foo(2), Foo(3)]')
Aber eval
funktioniert gut:
In [46]: eval('[Foo(1), Foo(2), Foo(3)]')
Out[46]:
[<__main__.Foo at 0x107e13940>,
<__main__.Foo at 0x107e131d0>,
<__main__.Foo at 0x107e13160>]
Wie kann ich kombinieren die Sicherheit von ast.literal_eval
mit der Funktionalität von eval
für benutzerdefiniertes Objekt s?
Ich habe bei this gesucht, aber dies bezieht sich auf Variablen, die bereits vorhanden sind.
Funktionsaufrufe sind keine * Literale *. Eine wörtliche ist ein * Stringliteral * ein * Ganzzahlliteral * 'true',' false', 'None', * Liste wörtliche *, * Tupel wörtliche *, * gesetzt wörtliche * und * Wörterbuch wörtliche *. –
z.B. 'ast.literal_eval ('dict()')' schlägt ebenfalls fehl. Da Sie in Ihrem Code "dict (..)" überschrieben haben könnten. Alle Anrufe - unabhängig davon, ob diese eingebaut sind oder nicht - werden fehlschlagen. –
@WillemVanOnsem Unterm Strich also, gibt es keine Lösung? –