Spec-Zone.ru › Python 3.8

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–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.8/library/codeop.html

Spec-Zone.ru

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