codeop — Компиляция кода Python
Исходный код: Lib/codeop.py
Модуль codeop предоставляет средства, с помощью которых можно эмулировать цикл чтения-вычисления-печати Python, как это сделано в модуле code. Поэтому, вероятно, вам не следует использовать этот модуль напрямую; если вы хотите включить такой цикл в свою программу, вам, скорее всего, следует использовать модуль code.
Эта задача состоит из двух частей:
- Определение того, завершает ли строка ввода инструкцию Python: короче говоря, определение того, следует ли далее вывести «
>>>» или «...». - Запоминание введённых пользователем операторов future, чтобы последующий ввод можно было компилировать с их учётом.
Модуль 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__, экземпляр «запоминает» её и компилирует все последующие тексты программ с учётом этой инструкции.
© 2001–2025 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/library/codeop.html