code — Базовые классы интерпретатора
Исходный код: Lib/code.py
Модуль code предоставляет средства для реализации циклов чтение-вычисление-вывод в Python. Включает два класса и вспомогательные функции, которые можно использовать для создания приложений с интерактивным приглашением интерпретатора.
-
class code.InteractiveInterpreter(locals=None) -
Этот класс обрабатывает синтаксический разбор и состояние интерпретатора (пространство имен пользователя); он не обрабатывает буферизацию ввода, подсказки или именование файлов ввода (имя файла всегда передаётся явно). Необязательный аргумент locals указывает отображение, используемое в качестве пространства имен, в котором будет выполняться код; по умолчанию это созданный словарь с ключом
'__name__'со значением'__console__'и ключом'__doc__'со значениемNone.
-
class code.InteractiveConsole(locals=None, filename='<console>', local_exit=False) -
Тесно эмулирует поведение интерактивного интерпретатора Python. Этот класс опирается на
InteractiveInterpreterи добавляет подсказки, используя знакомыеsys.ps1иsys.ps2, а также буферизацию ввода. Если local_exit имеет значение True,exit()иquit()в консоли не будут подниматьSystemExit, а вместо этого вернут управление вызывающему коду.Изменено в версии 3.13: Добавлен параметр local_exit.
-
code.interact(banner=None, readfunc=None, local=None, exitmsg=None, local_exit=False) -
Вспомогательная функция для запуска цикла чтение-вычисление-вывод. Создаёт новый экземпляр
InteractiveConsoleи устанавливает readfunc в качестве методаInteractiveConsole.raw_input(), если он предоставлен. Если local предоставлен, он передаётся в конструкторInteractiveConsoleдля использования в качестве пространства имен по умолчанию для цикла интерпретатора. Если local_exit предоставлен, он передаётся в конструкторInteractiveConsole. Затем запускается методinteract()экземпляра с передачей banner и exitmsg в качестве заголовка и сообщения выхода, если они предоставлены. Объект консоли удаляется после использования.Изменено в версии 3.6: Добавлен параметр exitmsg.
Изменено в версии 3.13: Добавлен параметр local_exit.
-
code.compile_command(source, filename='<input>', symbol='single') -
Эта функция полезна для программ, которые хотят эмулировать основной цикл интерпретатора Python (также известный как цикл чтение-вычисление-вывод). Сложная часть заключается в определении того, когда пользователь ввёл неполную команду, которая может быть завершена вводом дополнительного текста (по сравнению с полной командой или синтаксической ошибкой). Эта функция почти всегда принимает такое же решение, как и реальный основной цикл интерпретатора.
source — строка исходного кода; filename — необязательное имя файла, из которого был прочитан исходный код, по умолчанию
'<input>'; а symbol — необязательный начальный символ грамматики, который должен быть'single'(по умолчанию),'eval'или'exec'.Возвращает объект кода (такой же, как
compile(source, filename, symbol)) если команда полна и корректна;Noneесли команда неполна; вызываетSyntaxError, если команда полна и содержит синтаксическую ошибку, или вызываетOverflowErrorилиValueError, если команда содержит некорректную литерал.
Объекты интерактивного интерпретатора
-
InteractiveInterpreter.runsource(source, filename='<input>', symbol='single') -
Компилирует и выполняет часть исходного кода в интерпретаторе. Аргументы аналогичны аргументам функции
compile_command(); по умолчанию filename равен'<input>', а symbol равен'single'. Возможны несколько исходов:- Вход некорректен;
compile_command()вызывает исключение (SyntaxErrorилиOverflowError). Трассировка синтаксической ошибки будет напечатана вызовом методаshowsyntaxerror().runsource()возвращаетFalse. - Вход неполный, требуется дополнительный ввод;
compile_command()вернулаNone.runsource()возвращаетTrue. - Вход полный;
compile_command()возвращает объект кода. Код выполняется вызовомruncode()(который также обрабатывает исключения во время выполнения, кромеSystemExit).runsource()возвращаетFalse.
Возвращаемое значение можно использовать для принятия решения о том, использовать
sys.ps1илиsys.ps2для подсказки следующей строки. - Вход некорректен;
-
InteractiveInterpreter.runcode(code) -
Выполняет объект кода. При возникновении исключения вызывается
showtraceback()для отображения трассировки. Все исключения обрабатываются, кромеSystemExit, которое разрешается распространяться.Примечание об исключении
KeyboardInterrupt: это исключение может возникнуть в другом месте этого кода и не всегда обрабатывается. Вызывающая сторона должна быть готова к работе с ним.
-
InteractiveInterpreter.showsyntaxerror(filename=None) -
Отображает синтаксическую ошибку, которая только что произошла. Это не отображает трассировку стека, поскольку для синтаксических ошибок её нет. Если задан filename, он подставляется в исключение вместо файла по умолчанию, предоставляемого парсером Python, поскольку он всегда использует
'<string>'при чтении из строки. Вывод записывается методомwrite().
-
InteractiveInterpreter.showtraceback() -
Отображает исключение, которое только что произошло. Мы удаляем первый элемент стека, так как он находится внутри реализации объекта интерпретатора. Вывод записывается методом
write().Изменено в версии 3.5: Отображается полная цепочка трассировки, а не только основная трассировка.
-
InteractiveInterpreter.write(data) -
Записывает строку в поток стандартной ошибки (
sys.stderr). Производные классы должны переопределять этот метод, чтобы обеспечить соответствующую обработку вывода по мере необходимости.
Объекты интерактивной консоли
Класс InteractiveConsole является подклассом InteractiveInterpreter и поэтому предоставляет все методы объектов интерпретатора, а также следующие дополнения.
-
InteractiveConsole.interact(banner=None, exitmsg=None) -
Тщательно эмулирует интерактивную консоль Python. Необязательный аргумент banner указывает баннер, который будет напечатан перед первым взаимодействием; по умолчанию он печатает баннер, аналогичный тому, который печатает стандартный интерпретатор Python, за которым следует имя класса объекта консоли в скобках (чтобы не перепутать его с реальным интерпретатором — так как он очень похож!).
Необязательный аргумент exitmsg определяет сообщение об окончании работы, выводимое при выходе. Передайте пустую строку, чтобы подавить сообщение об окончании работы. Если аргумент exitmsg не указан или
None, выводится сообщение по умолчанию.Изменено в версии 3.4: Чтобы подавить вывод баннера, передайте пустую строку.
Изменено в версии 3.6: Выводится сообщение об окончании работы при выходе.
-
InteractiveConsole.push(line) -
Передает строку исходного текста в интерпретатор. Строка не должна содержать завершающего символа новой строки; она может содержать внутренние символы новой строки. Строка добавляется в буфер, и вызывается метод интерпретатора
runsource()со скопированным содержимым буфера в качестве исходного текста. Если это указывает, что команда была выполнена или некорректна, буфер сбрасывается; в противном случае команда неполна, и буфер остается таким, каким он был после добавления строки. Возвращаемое значение —Trueесли требуется дополнительный ввод,Falseесли с линией было что-то сделано (это то же самое, чтоrunsource()).
-
InteractiveConsole.resetbuffer() -
Удалите любой необработанный исходный текст из буфера ввода.
-
InteractiveConsole.raw_input(prompt='') -
Вывести приглашение и прочитать строку. Возвращаемая строка не включает завершающий символ новой строки. Когда пользователь вводит последовательность символов EOF, возникает исключение
EOFError. Базовая реализация считывает изsys.stdin; подкласс может заменить это другой реализацией.
© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/library/code.html