擅长:python、mysql、java
<p>利用消息来源,卢克!</p>
<p><a href="http://hg.python.org/cpython/file/2.7/Lib/ast.py#l40" rel="nofollow">^{<cd1>}</a>
<a href="http://hg.python.org/cpython/file/3.2/Lib/ast.py#l39" rel="nofollow">^{<cd2>}</a></p>
<p>你会在里面找到答案的。具体来说,2.7版本对<a href="http://hg.python.org/cpython/file/2.7/Lib/ast.py#l70" rel="nofollow">line 70</a>有一个奇怪的限制,即BinOp的右节点是复杂的。</p>
<pre><code>>>> sys.version
'2.7.3 (default, Sep 26 2013, 20:03:06) \n[GCC 4.6.3]'
>>> ast.literal_eval('9 + 0j')
(9 + 0j)
>>> ast.literal_eval('0j + 9')
ValueError: malformed string
</code></pre>
<p>我猜2.7的目的是允许复杂文本的<code>literal_eval</code>,例如<code>9 + 0j</code>这样的数字,它从来没有打算做简单的整数加法。然后在python 3中,他们增加了<code>literal_eval</code>来处理这些情况。</p>