Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python3语法:文件末尾是否有换行符?_Python_Python 3.x_Parsing_Grammar - Fatal编程技术网

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
的参考。这完全回答了我的问题。请随意发布答案,我会接受的