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
()¶ Удалить любой необработанный исходный текст из входного буфера.