codeop — Компиляция кода Python
Исходный код: Lib/codeop.py
Модуль codeop предоставляет утилиты, на основе которых можно эмулировать цикл чтения-вычисления-вывода Python, как это делается в модуле code. В результате, вам, вероятно, не нужно использовать этот модуль напрямую; если вы хотите включить такой цикл в свою программу, вам, вероятно, следует использовать модуль code.
Эта задача состоит из двух частей:
- Определение, завершает ли строка ввода оператор Python: коротко, нужно ли вывести «
>>>» или «...» дальше. - Запоминание ранее введённых будущих операторов, чтобы последующий ввод можно было компилировать с учётом этих операторов.
Модуль 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.5/library/codeop.html