2014-01-15 15 views
5

SymPy ist mit der sympify() -Funktion ausgestattet, die beliebige Strings in SymPy-Ausdrücke parsen kann. Aber es hat zwei große Nachteile:SymPy: Strings sicher analysieren

  1. Es ist nicht sicher, wie es auf dem berüchtigten eval beruht()
  2. Es vereinfacht automatisch den Lese Ausdruck. z.B. sympify (‚binomisch (5,3)‘) wird den Ausdruck 10.

Also meine Fragen zurückkehren, sind:

Erstens gibt es eine Möglichkeit, um die Zeichenfolge „nur zu analysieren“, ohne zusätzliche Berechnungen ? Ich möchte so etwas wie dieser Effekt erreichen:

latex(parse('binomial(5,3)')) #returns '{\\binom{5}{3}}' 

Zweitens gibt es eine akzeptierte Möglichkeit sympify (d analysiert und berechnet) beliebige nutzergenerierten Zeichenfolge während der sicheren Seite? Es wird von SymPy Gamma gemacht, also ist es in der Praxis möglich, aber die Frage ist, wieviel Dreckarbeit benötigt wird.

Antwort

1

Sehen Sie sich die internen Funktionen im SymPy-Parsing-Modul an.

Es gibt keine offizielle Möglichkeit, dies zu tun. Wir müssen umschreiben, um Eval zu vermeiden. Beachten Sie, dass SymPy Gamma nur sympify verwendet. Es bleibt sicher, da es in der App Engine auf Sandboxing basiert.