ich möchte in einer Konfigurationsdatei dem User die Möglichkeit geben, simple Tests zu definieren, anhand derer dann später ein Datensatz aus einer gegebenen Datenbasis extrahiert wird. Beides liegt im JSON-Format vor.
Ein Test könnte beispielhaft so aussehen:
Code: Alles auswählen
"name": "titles > 350 or titles < 200"
Ich würde da jetzt folgendermaßen vorgehen, indem ich einfach lambda-Ausdrücke nutze:
Code: Alles auswählen
In [33]: tests = {"title": "titles > 350 or titles < 200"}
In [34]: test = eval("lambda titles:" + tests["title"])
In [35]: test(400)
Out[35]: True
In [36]: test(300)
Out[36]: False
So weit so gut, aber was ich mich nun frage ist vor allem, wie "sicher" wäre so eine Lösung? Zum einen in bezug auf bösartigen Code, zum anderen bezüglich auf Fehler? (reicht z.B. das Abfangen von SyntaxError beim eval?)
Oder wäre ein anderer Ansatz sinnvoller? Man könnte ja auch für derart einfache Tests natürlich eine simple Logik-Sprache entwickeln - wie ich sma kenne, wäre das etwas für ihn