Spec-Zone.ru › Python 3.12

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

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

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

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

  1. Возможность определить, завершает ли строка ввода выражение Python: короче говоря, определить, следует ли вывести «>>>» или «...» дальше.
  2. Запоминание введённых пользователем будущих операторов, чтобы последующий ввод можно было компилировать с учётом этих операторов.

Модуль 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.12/library/codeop.html

Spec-Zone.ru

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