code — Базовые классы интерпретатора
Исходный код: Lib/code.py
Модуль code предоставляет средства для реализации циклов read-eval-print в 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) -
Вспомогательная функция для запуска цикла read-eval-print. Создаёт новый экземпляр
InteractiveConsoleи устанавливает readfunc в качестве используемого методаInteractiveConsole.raw_input(), если он предоставлен. Если предоставлен local, он передаётся в конструкторInteractiveConsoleдля использования в качестве пространства имён по умолчанию для цикла интерпретатора. Затем выполняется методinteract()экземпляра с передачей banner и exitmsg в качестве заголовка и сообщения об выходе, если они предоставлены. Объект консоли удаляется после использования.Изменено в версии 3.6: Добавлен параметр exitmsg.
-
code.compile_command(source, filename="<input>", symbol="single") -
Эта функция полезна для программ, которые хотят эмулировать основной цикл интерпретатора Python (также известный как цикл read-eval-print). Сложная часть заключается в определении того, когда пользователь ввёл неполную команду, которую можно завершить вводом дополнительного текста (в отличие от полной команды или синтаксической ошибки). Эта функция почти всегда принимает то же решение, что и основной цикл интерпретатора.
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–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.7/library/code.html