codeop
— Компиляция Python кода¶
Исходный код: Lib/codeop.py
Модуль codeop
предоставляет утилиты, с помощью которых можно эмулировать
Python цикл чтение-выполнение-печати, как это делается в модуле
code
. В результате, вы, вероятно, не хотите использовать модуль напрямую;
если вы хотите включить такой цикл в вашей программе, вы, вероятно, хотите
использовать модуль code
.
Эта работа состоит из двух частей:
- Будучи в состоянии сказать, если строка ввода завершает Python оператор:
короче, говоря, нужно ли печатать „
>>>
“ или „...
“ рядом. - Запоминанание того, какие будущее операторы ввёл пользователь, так что последующий ввод может быть скомпилирован с учётом их влияния.
Модуль codeop
предоставляет способ выполнения каждой из этих вещей, а также
вариант выполнения их обоих.
Выполняет только первое:
-
codeop.
compile_command
(source, filename="<input>", symbol="single")¶ Пытается скомпилировать source, которые должны быть строкой Python кода и возвращает объект кода если source является правильным Python кодом. В этом случае атрибут filename объекта кода будет filename, который по умолчанию
'<input>'
. ВозвращаетNone
если source не является правильным Python кодом, но является префиксом для правильного Python кода.Если есть проблема с source, будет вызвано исключение. Вызов
SyntaxError
, если недопустимый синтаксис Python иOverflowError
илиValueError
если существует неверный литерал.Аргумент symbol определяет, компилируется ли source как оператор (
'single'
, по умолчанию), как последовательность операторов ('exec'
) или как выражение ('eval'
). Любое другое значение приведет к увеличениюValueError
.Примечание
Возможно (но маловероятно), что парсер останавливает парсинг с удачным исходом до достижения конца источника; в этом случае, завершающие- символы могут быть проигнорированы, вместо вызова ошибки. Например, обратная косая черта за которой следуют две новые строки, могут следовать произвольным мусором. Это будет исправлено после того, как API парсерера станет лучше.
-
class
codeop.
Compile
¶ Экземпляры этого класса содержат
__call__()
методы идентичные сигнатуре встроенной функцииcompile()
, но с той разницей, что если сущность компилирует текст программы, содержащий__future__
экземпляр «помнит» и компилируют все последующие программные тексты с вступившим в силу оператором.
-
class
codeop.
CommandCompiler
¶ Экземпляры этого класса содержат
__call__()
методы идентичные сигнатуреcompile_command()
; разница в том, что если сущность компилирует текст программы, содержащей заявление__future__
, экземпляр «помнит» и компилируют все последующие программные тексты с вступившим в силу оператором.