在py_compile与import中的编码区别

3
当使用py_compile.compile编译一个包含非ASCII字符的Python脚本时,它不会抱怨编码问题。但是在Python 2.7中导入时会出现"SyntaxError: Non-ASCII character '\xe2' in file"错误。为什么会这样?导入和使用py_compile.compile有什么区别?
1个回答

1
似乎Python提供了两个版本的词法分析器,一个是在Python解析文件时内部使用的,另一个则通过__builtins__.compiletokenizer.generate_tokens等方式向Python公开。仅前者检查非ASCII字符。这由Parser/tokenizer.c中的#ifdef PGEN控制。
我有一个合格的猜测,为什么他们会这样做:在Python 3中,.py文件中允许非ASCII字符,并且据我所知被解释为utf-8。通过在词法分析器中默默地允许UTF-8,2.7的tokenizer.generate_tokens()函数可以接受所有有效的Py3代码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接