Spec-Zone.ru › Python 3.12

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, значение которого по умолчанию — '<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.12/library/codeop.html

Spec-Zone.ru

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