code — Базовые классы интерпретатора
Исходный код: Lib/code.py
Модуль code предоставляет средства для реализации циклов «чтение-вычисление-вывод» в Python. Он включает два класса и функции удобства, которые могут быть использованы для создания приложений, предоставляющих интерактивный приглашение интерпретатора.
-
class code.InteractiveInterpreter(locals=None) -
Этот класс обрабатывает разбор и состояние интерпретатора (пространство имен пользователя); он не обрабатывает буферизацию ввода, приглашения или именование файлов ввода (имя файла всегда передаётся явно). Дополнительный аргумент locals определяет словарь, в котором будет выполняться код; по умолчанию создаётся новый словарь с ключом
'__name__', установленным в'__console__', и ключом'__doc__', установленным вNone.
-
class code.InteractiveConsole(locals=None, filename='<console>') -
Тщательно эмулирует поведение интерактивного интерпретатора Python. Этот класс основан на
InteractiveInterpreterи добавляет приглашения, используя знакомыеsys.ps1иsys.ps2, и буферизацию ввода.
-
code.interact(banner=None, readfunc=None, local=None, exitmsg=None) -
Функция удобства для запуска цикла «чтение-вычисление-вывод». Она создаёт новый экземпляр
InteractiveConsoleи устанавливает readfunc для использования в качестве методаInteractiveConsole.raw_input(), если он предоставлен. Если предоставлено local, оно передаётся конструкторуInteractiveConsoleдля использования в качестве пространства имён по умолчанию для цикла интерпретатора. Затем методinteract()экземпляра запускается с banner и exitmsg, переданными в качестве заголовка и сообщения завершения, если они предоставлены. Объект консоли удаляется после использования.Изменено в версии 3.6: Добавлен параметр exitmsg.
-
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.12/library/code.html