Spec-Zone.ru › Python 3.6

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', по умолчанию) или как выражение ('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.6/library/codeop.html

Spec-Zone.ru

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