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 (т.е. цикл «чтения-исполнения-печати»). Хитрая часть состоит в том, чтобы определить, когда пользователь ввёл неполную команду, которую можно выполнить, введя больше текста (в отличие от завершенной команды или синтаксической ошибки). Эта функция almost всегда принимает то же решение, что и основной цикл главного интерпретатора.
source — исходная строка; filename — необязательное имя файла, из которого был прочитан источник, по умолчанию
'<input>'; и symbol - необязательный символ начала грамматики, который должен быть'single'(по умолчанию),'eval'или'exec'.Возвращает код объект (то же, что и
compile(source, filename, symbol)), если команда выполнена и правильна;Noneесли команда является неполной; вызываетSyntaxError, если команда завершена и содержит синтаксическую ошибку, или вызываетOverflowErrorилиValueError, если команда содержит недопустимый литерал.
Объекты интерактивного интерпретатора¶
-
InteractiveInterpreter.runsource(source, filename="<input>", symbol="single")¶ Скомпилировать и запустить source в интерпретаторе. Аргументы такие же, как и для
compile_command(); значение по умолчанию filename -'<input>', а для symbol -'single'. В результате могут произойти различные события:- Входные данные неверны;
compile_command()вызвало исключение (SyntaxErrorилиOverflowError). Синтаксически трейсбэк будет напечатан путём вызова методаshowsyntaxerror().runsource()возвращаетFalse. - Ввод неполный, требуется больше данных;
compile_command()возвращает``None``.runsource()возвращаетTrue. - Ввод выполнен;
compile_command()возвращенныйa код объекта. Выполнение кода осуществляется путём вызова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). Производные классы должны переопределять их, чтобы обеспечить необходимую обработку выходных данных.
Интерактивные объекты консоли¶
Класс: class: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()¶ Удалить любой необработанный исходный текст из входного буфера.
