Python脚本中存在’LF’时的有趣行为,解释器中的错误?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python脚本中存在’LF’时的有趣行为,解释器中的错误?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1374字,纯文字阅读大概需要2分钟。
内容图文
![Python脚本中存在’LF’时的有趣行为,解释器中的错误?](/upload/InfoBanner/zyjiaocheng/781/303d0d8d7ced4181beadeabb2e3be4a9.jpg)
当Python脚本中有U000a(所谓的’LF’)时,会发生一些有趣的事情.
在Linux上,我用Python2和Python3尝试了几种情况(见下文),并得出以下结论:
‘LF’ makes the successive token in this visible line ignored, but will execute next line.
它是否包含在Python规范中,或者它是解释器中的错误?
对我来说,这至少是解析器的一个问题,因为’LF’不应该具有上面的语义;但是日常使用似乎没有什么大问题.
由于’LF’不可打印,我附上了截图,其中^ @代表’LF'(U000a).对于那些有兴趣尝试的人,我提供了gist(需要git克隆它).
根据评论更新
import test_2与python2 REPL一样工作,但会导致ValueError:源代码字符串在python3中不能包含空字节;直接运行时两者都如上所述.
解决方法:
这不是LF U 000A.这是一个NUL,U 0000,在vim,emacs或更少时显示为^ @ – 如果出现这种情况,LF将显示为^ J,但LF显示为换行符.我并不奇怪Python以奇怪的方式处理源代码中的NUL字节,因为文本文件中的NUL字节在用C编写的程序中以这种方式处理是很常见的.
它似乎是Python解析器本身的缺陷.如果您尝试在Python解释器中复制行为,
import parser
parser.st2list(parser.expr('"hello"\0"goodbye"'))
你会收到一个错误:
TypeError: expr() argument 1 must be str without null characters, not str
对我来说,这表明该行为是无意的,并且从文件加载代码会绕过此检查.我认为这是Python解释器中的一个错误.
只有当有问题的文件是主程序时才会发生这种情况.如果导入包含NUL字节的文件,则会出错.看来这是因为Python使用fgets()(参见tokenizer.c:1022)逐行读取主??源文件,该文件返回以NUL结尾的字符串.如果该行包含NUL字节,则它将被截断.
内容总结
以上是互联网集市为您收集整理的Python脚本中存在’LF’时的有趣行为,解释器中的错误?全部内容,希望文章能够帮你解决Python脚本中存在’LF’时的有趣行为,解释器中的错误?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。