кодировка в py_compile против импорта - PullRequest
0 голосов
/ 11 июня 2018

Когда скрипт python с не ASCII-символом компилируется с использованием py_compile.compile, он не жалуется на кодировку.Но когда импортируется дает в Python 2.7

SyntaxError: Non-ASCII character '\xe2' in file

Почему это происходит?В чем разница между импортом и компиляцией с использованием py_compile?

1 Ответ

0 голосов
/ 19 марта 2019

Кажется, что Python предоставляет два варианта своего лексера, один из которых используется внутри себя, когда сам Python анализирует файлы, и другой, который предоставляется Python, например, через __builtins__.compile или tokenizer.generate_tokens.Кажется, только первый проверяет наличие символов не ASCII.Он контролируется #ifdef PGEN в Parser / tokenizer.c.

У меня есть точное предположение о том, почему они так поступили: в Python 3 не-ASCII-символы разрешены в файлах .py иинтерпретируется как UTF-8 IIRC.При тихом разрешении UTF-8 в лексере функция 2.7 tokenizer.generate_tokens() может принимать весь действительный код Py3.

...