当使用py_compile.compile编译具有非ASCII字符的python脚本时,它不会抱怨编码。但是当导入时会在python 2.7中提供
SyntaxError: Non-ASCII character '\xe2' in file
为什么会这样?什么是使用py_compile进行导入和编译之间的区别?
答案 0 :(得分:0)
似乎Python提供了其词法分析器的两种变体,一种在Python本身解析文件时在内部使用,另一种通过例如__builtins__.compile
或tokenizer.generate_tokens
。看起来,只有前一个检查非ASCII字符。它由Parser / tokenizer.c中的#ifdef PGEN
控制。
我对为什么要这样做有一个很好的猜测:在Python 3中,.py文件中允许使用非ASCII字符,并将其解释为utf-8 IIRC。通过在词法分析器中静默允许UTF-8,2.7的tokenizer.generate_tokens()
函数可以接受所有有效的Py3代码。