你对“工作”有一个奇怪的定义:
>>> eval("for i in range(5):\n print 'hello'")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1
for i in range(5):
^
SyntaxError: invalid syntax
>>>
我不确定你为什么使用eval
- 我怀疑你的意思是exec
. 表达式和语句在 Python 中是完全不同的实体——eval
仅处理表达式(裸表达式也是语句,因此exec
可以像处理其他语句一样处理它)。
转向exec
,并考虑作为 Python 核心提交者的情况,我认为这是一个小的错误设计:就像在接受和忽略 NEWLINE 之前的(冗余和无用的)空格、制表符和表单提要一样,应该(就像冗余一样)和无用的)回车是。我很抱歉:我认为我们从未考虑过有人可能想要在此处放置回车 - 但是,在那里放置例如表单提要没有任何意义,我们确实接受......所以我认为没有拒绝回车的理由(或其他 Unicode 非 ANSI 空格,现在在 Python 3 中,我们在标识符中接受任意 Unicode 非 ANSI 字母数字)。
如果您关心,请在 Python 的问题跟踪器上打开一个问题,并且(除非其他提交者意外反对)我认为我可以通过 Python 3.2 修复它(应该在 12 到 18 个月内发布 - 这是一个估计 [知情猜测],不是承诺;-)。