Spec-Zone.ru › Python 3.9

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, по умолчанию '<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–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.9/library/codeop.html

Spec-Zone.ru

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