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