Spec-Zone.ru › Python 3.13

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.13/library/codeop.html

Spec-Zone.ru

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