Spec-Zone.ru › Python 3.14

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

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

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

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

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

Модуль 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 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.14/library/codeop.html

Spec-Zone.ru

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