Python3语法:文件末尾是否有换行符?
查看,我们可以看到,使用Python3语法:文件末尾是否有换行符?,python,python-3.x,parsing,grammar,Python,Python 3.x,Parsing,Grammar,查看,我们可以看到,使用file\u input作为起始符号,有效的产品可能是一条语句。例如,类似于: stmt ENDMARKER 这就像文件中只有一个文本一样 [1, 2, 3] 但是,stmt->simple\u stmt的规则要求stmts以换行符结束。因此,我假设一个文件包含一个文本列表,并且末尾没有换行符,这将导致解析/语法错误。但事实并非如此 python是在解析的文件中附加\n字符,还是总是在ENDMARKER之前发出NEWLINE标记。1) POSIX文本文件(根据定义)总
file\u input
作为起始符号,有效的产品可能是一条语句。例如,类似于:
stmt ENDMARKER
这就像文件中只有一个文本一样
[1, 2, 3]
但是,stmt->simple\u stmt
的规则要求stmt
s以换行符结束。因此,我假设一个文件包含一个文本列表,并且末尾没有换行符,这将导致解析/语法错误。但事实并非如此
python是在解析的文件中附加\n
字符,还是总是在ENDMARKER
之前发出NEWLINE
标记。1) POSIX文本文件(根据定义)总是以换行符结尾,因此这仅是由Windows文本编辑器保存的文件的问题,它可能会忽略最后的换行符。2) 至少在CPython中,exec
将在必要时附加一个最后的换行符(请参见Parser/tokenizer.c
)。我不知道POSIX文本文件必须以换行符结尾。那很有趣。同时感谢您对tokenizer.c
的参考。这完全回答了我的问题。请随意发布一个答案,我会接受一些观察结果。1) POSIX文本文件(根据定义)总是以换行符结尾,因此这仅是由Windows文本编辑器保存的文件的问题,它可能会忽略最后的换行符。2) 至少在CPython中,exec
将在必要时附加一个最后的换行符(请参见Parser/tokenizer.c
)。我不知道POSIX文本文件必须以换行符结尾。那很有趣。同时感谢您对tokenizer.c
的参考。这完全回答了我的问题。请随意发布答案,我会接受的