Spec-Zone.ru › Python 3.13

codeop — Компиляция кода Python

Исходный код: Lib/codeop.py

Модуль codeop предоставляет средства, с помощью которых можно эмулировать цикл чтения-вычисления-печати Python, как это сделано в модуле code. Поэтому, вероятно, вам не следует использовать этот модуль напрямую; если вы хотите включить такой цикл в свою программу, вам, скорее всего, следует использовать модуль code.

Эта задача состоит из двух частей:

  1. Определение того, завершает ли строка ввода инструкцию Python: короче говоря, определение того, следует ли далее вывести «>>>» или «...».
  2. Запоминание введённых пользователем операторов 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API