классы интерпретатора 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'.Возвращает объект кода (тот же, что и
compile(source, filename, symbol)) если команда полна и верна;Noneесли команда неполна; вызываетSyntaxError, если команда полна и содержит синтаксическую ошибку, или вызываетOverflowErrorилиValueError, если команда содержит недопустительную литеральную константу.
30.1.1. Объекты интерпретатора
-
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). Производные классы должны переопределять этот метод, чтобы обеспечить соответствующую обработку вывода, если необходимо.
30.1.2. Объекты консоли
Класс 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–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.6/library/code.html