回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>有没有针对Python的数学表达式解析器+求值器?在</p>
<p>我不是第一个问这个问题的人,但答案通常指向<code>eval()</code>。例如,可以这样做:</p>
<pre><code>>>> safe_list = ['math','acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'cosh', 'degrees', 'e', 'exp', 'fabs', 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log', 'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'abs']
>>> safe_dict = dict([ (k, locals().get(k, None)) for k in safe_list ])
>>> s = "2+3"
>>> eval(s, {"__builtins__":None}, safe_dict)
5
</code></pre>
<p>但这是<a href="http://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html">not safe</a>:</p>
^{pr2}$
<p>另外,使用<code>eval</code>来解析和计算数学表达式在我看来是错误的。在</p>
<p>我找到了<a href="http://www.bestcode.com/html/evaluate_math_expressions_pyth.html">PyMathParser</a>,但它在引擎盖下也使用了<code>eval</code>,而且没有更好的:</p>
<pre><code>>>> import MathParser
>>> m=MathParser.PyMathParser()
>>> m.expression = s_badbaduser
>>> m.evaluate();
Segmentation fault
</code></pre>
<p>有没有一个库可以在不使用Python解析器的情况下解析和计算数学表达式?在</p>