为什么 eval 函数不能与 \r\n 一起使用,而可以与 \n 一起使用。例如
eval("for i in range(5):\r\n print 'hello'") 不起作用
eval("for i in range(5):\n print 'hello'") 有效
我知道使用 Replace("\r","") 不会导致问题被纠正,但有人知道为什么会发生?
- 编辑 -
哦!抱歉,确切地说,我的意思是执行。出现回车是因为我正在通过 POST 从 HTML 文本区域读取内容(我在 Linux 机器上)。现在清楚了,谢谢大家。
你对“工作”有一个奇怪的定义:
>>> 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
只处理表达式(一个裸表达式is也是一个声明,所以exec
可以处理它以及其他语句)。
转向exec
,并思考作为 Python 核心提交者的情况,我认为这是一个小小的错误设计:就像(冗余和无用的)空格、制表符和换页符一样,在接受和忽略换行符之前,应该(就像冗余和无用的) ) 回车是。我道歉:我想我们从来没有考虑过有人可能want将回车符放在那里——但是,这样就没有任何意义了。在那里换页,我们确实接受that...所以我认为没有理由拒绝回车(或其他 Unicode 非 ANSI 空白,现在在 Python 3 中我们接受标识符中的任意 Unicode 非 ANSI 字母数字)。
如果你关心的话,请在 Python 的问题跟踪器上打开一个问题,并且(除非其他提交者出现不可预见的反对)我想我可以通过 Python 3.2 修复它(应该在 12 到 18 个月内发布——这是一个估计 [知情猜测] ],不是承诺;-)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)