Spec-Zone.ru › Python 3.5

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

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

Модуль codeop предоставляет утилиты, на основе которых можно эмулировать цикл чтения-вычисления-вывода Python, как это делается в модуле 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', по умолчанию) или как выражение ('eval'). Любое другое значение вызовет возбуждение исключения ValueError.

Примечание

Возможно (но маловероятно), что анализатор остановится с успешным результатом, не дойдя до конца исходного кода; в этом случае символы в конце могут быть проигнорированы, вместо того, чтобы вызывать ошибку. Например, обратный слэш, за которым следуют две пустые строки, может быть за ним произвольный мусор. Это будет исправлено, как только API для анализатора будет улучшен.

class codeop.Compile

Экземпляры этого класса имеют __call__() методы, идентичные по сигнатуре встроенной функции compile(), но с тем отличием, что если экземпляр компилирует текст программы, содержащий оператор __future__, экземпляр «запоминает» и компилирует все последующие тексты программы с оператором в силе.

class codeop.CommandCompiler

Экземпляры этого класса имеют __call__() методы, идентичные по сигнатуре методу compile_command(); отличие состоит в том, что если экземпляр компилирует текст программы, содержащий оператор __future__, экземпляр «запоминает» и компилирует все последующие тексты программы с оператором в силе.

© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.5/library/codeop.html

Spec-Zone.ru

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