擅长:python、mysql、java
<p>一个明显的解决方案,可能对您的特定eval字符串有效,也可能不起作用。在</p>
<pre><code>def isevaluable(s):
try:
compile(s, "bogusfile.py", "exec")
return True
except:
return False
</code></pre>
<p>这将编译代码,检查语法错误等。
不会捕捉到你所有的逻辑问题,但它会检查程序问题,然后再射击到eval,这可能会导致各种各样的麻烦。在</p>
<p>我想做的是:</p>
^{pr2}$
<p>但请记住,您将执行字符串,这可能会使您的结果模糊,并将其放入列表中。<br/>
例如,如果您的字符串是<code>rm /tmp/cache.txt</code>,这将在您的<code>isevaluable</code>中得到一个正结果,<code>[eval(x) ...]</code>中得到一个负结果,因为它在try语句中被删除了。在</p>
<p>在这种情况下,<code>compile()</code>是一个更好的选择。任何例子都有可能。在</p>