Ich gebe ein Beispiel, in dem ich eval
verwendet habe und wo ich denke, es war die beste Wahl.
Ich schrieb ein einfaches Software-Testprogramm ... etwas, um zu testen, ob die Übungen der Schüler den Anforderungen der Aufgaben entsprechen.Das Ziel bestand darin, eine einfache Konfigurationsdatei als Testspezifikation bereitzustellen (um eine "Henne-und-Ei" -Problematik der Verwendung einer Programmiersprache zur Beschreibung/Dokumentation/Implementierung der Testfälle für elementare Programmieraufgaben zu umgehen). .
Ich basierte mein Kabelbaum auf dem ConfigParser in den Standardbibliotheken. Ich wollte jedoch die Möglichkeit, beliebige Python-Zeichenfolgen (einschließlich Interpolationen von \ n, \ t und insbesondere interpolierte hexadezimale ASCII-Zeichen in den daraus gelesenen Werten darzustellen).
Meine Lösung war eine try
um eine parsed_string=eval('''%s''' % cfg_read_item)
gefolgt von a try
der dreifachen doppelt zitierten Version ("" "% s" "") derselben.
Dies ist ein Fall, in dem die Alternative gewesen wäre, einen Python-Parser zu schreiben (oder einen vorgefertigten Python-Parser zu finden) und ich finde heraus, wie ich es in mein Programm einbinden und anpassen kann, die Risiken sind minimal (ich mache mir keine Sorgen, dass der Student Code eingibt, wird meinen Parser austricksen, ausbrechen, alle meine Dateien löschen, meine Kreditkartennummern senden nach Rumänien und so weiter) *
* (Zum Teil, weil ich sie unter Linux von einem nicht vertrauenswürdigen kopflosen Benutzerkonto getestet habe).
Wie hier bereits erwähnt, gibt es andere Anwendungsfälle, in denen Sie Code aus einer Vorlage basierend auf Eingabedaten erstellen und diesen Code ausführen müssen (Metaprogrammierung). Sie sollten diese Aufgaben immer auf eine andere Weise erledigen können. Wenn jedoch diese Alternative einen Programmieraufwand mit sich bringt, der sich an das Schreiben eines allgemeinen Programmiersprachenparsers/-kompilierers/-interpreters annähert, dann kann eval
der bessere Ansatz sein.
Fakt: Dinge wie 'eval' sind sehr selten eine gültige Wahl, und nur dann, wenn die ihr zugeführte Zeichenkette als sicher bekannt ist. – delnan
Versuchen Sie, in den Python-Quellcodedateien in der Python-Standardbibliothek nach ihnen zu suchen. Das ist immer ein interessanter Ausgangspunkt, wenn Sie die grundlegenden Python-Funktionen sehen möchten. –
'exec' und' eval' können in [codegolfing] sehr nützlich sein (https://codegolf.stackexchange.com/). – Wrzlprmft