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–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.11/library/code.html