Документация Python неофициальный перевод
Содержание страницы

29.1. code – Базовые классы интерпретатораcode – Interpreter base classes

Модуль code предоставляет средства для реализации циклов чтение-вычисление-печать в Python. Включены два класса и вспомогательные функции, которые можно использовать для создания приложений, предоставляющих интерактивное приглашение интерпретатора.

class code.InteractiveInterpreter([locals])

Этот класс занимается разбором и состоянием интерпретатора (пространством имён пользователя); он не занимается буферизацией ввода, подсказками или именованием входных файлов (имя файла всегда передаётся явно). Необязательный аргумент locals задаёт словарь, в котором будет выполняться код; по умолчанию создаётся новый словарь с ключом '__name__', установленным в '__console__', и ключом '__doc__', установленным в None.

class code.InteractiveConsole([locals[, filename]])

Тесно эмулирует поведение интерактивного интерпретатора Python. Этот класс основан на InteractiveInterpreter и добавляет подсказки с помощью знакомых sys.ps1 и sys.ps2, а также буферизацию ввода.

code.interact([banner[, readfunc[, local]]])

Удобная функция для запуска цикла чтение-вычисление-печать. Она создаёт новый экземпляр InteractiveConsole и устанавливает readfunc для использования в качестве метода InteractiveConsole.raw_input(), если он указан. Если передан local, он передаётся конструктору InteractiveConsole для использования в качестве пространства имён по умолчанию для цикла интерпретатора. Затем метод interact() экземпляра выполняется с banner, если он указан. Объект консоли отбрасывается после использования.

code.compile_command(source[, filename[, symbol]])

Эта функция полезна для программ, которые хотят имитировать главный цикл интерпретатора Python (также известный как цикл чтение-вычисление-печать). Сложность заключается в определении того, когда пользователь ввёл неполную команду, которую можно дополнить, введя ещё текст (в отличие от полной команды или синтаксической ошибки). Эта функция почти всегда принимает то же решение, что и настоящий главный цикл интерпретатора.

source – строка исходного кода; filename – необязательное имя файла, из которого был прочитан исходный код, по умолчанию '<input>'; а symbol – необязательный начальный символ грамматики, который должен быть 'single' (по умолчанию) или 'eval'.

Возвращает объект кода (тот же, что и compile(source, filename, symbol)), если команда полная и корректная; None, если команда неполная; возбуждает SyntaxError, если команда полная и содержит синтаксическую ошибку, или возбуждает OverflowError или ValueError, если команда содержит недопустимый литерал.

29.1.1. Объекты интерактивного интерпретатораInteractive Interpreter Objects

InteractiveInterpreter.runsource(source[, filename[, symbol]])

Компилирует и выполняет некоторый исходный код в интерпретаторе. Аргументы те же, что и для 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])

Отображает только что возникшую синтаксическую ошибку. При этом не отображается стек вызовов, поскольку для синтаксических ошибок его нет. Если указан filename, он вставляется в исключение вместо имени файла по умолчанию, предоставленного синтаксическим анализатором Python, поскольку тот всегда использует '<string>' при чтении из строки. Вывод осуществляется методом write().

InteractiveInterpreter.showtraceback()

Отображает только что произошедшее исключение. Первый элемент стека удаляется, поскольку он находится в реализации объекта интерпретатора. Вывод записывается методом write().

InteractiveInterpreter.write(data)

Записывает строку в поток стандартных ошибок (sys.stderr). Производные классы должны переопределить этот метод, чтобы обеспечить соответствующую обработку вывода по мере необходимости.

29.1.2. Объекты интерактивной консолиInteractive Console Objects

Класс InteractiveConsole является подклассом InteractiveInterpreter и, следовательно, предоставляет все методы объектов интерпретатора, а также следующие дополнения.

InteractiveConsole.interact([banner])

Точно эмулирует интерактивную консоль Python. Необязательный аргумент banner задаёт приветствие, которое выводится перед первым взаимодействием; по умолчанию выводится приветствие, сходное с тем, что печатает стандартный интерпретатор Python, после чего в скобках указывается имя класса объекта консоли (чтобы не путать его с настоящим интерпретатором – настолько он близок!).

InteractiveConsole.push(line)

Передает строку исходного текста интерпретатору. Строка не должна содержать завершающего перевода строки; в ней могут быть внутренние переводы строк. Строка добавляется в буфер, и метод runsource() интерпретатора вызывается с объединенным содержимым буфера в качестве исходного кода. Если это указывает на то, что команда выполнена или некорректна, буфер сбрасывается; в противном случае команда неполна, и буфер остается в том же состоянии, что и после добавления строки. Возвращаемое значение равно True, если требуется дополнительный ввод, False, если строка была обработана каким-либо образом (это то же самое, что runsource()).

InteractiveConsole.resetbuffer()

Удаляет любой необработанный исходный текст из входного буфера.

InteractiveConsole.raw_input([prompt])

Выводит приглашение и читает строку. Возвращаемая строка не содержит завершающего символа новой строки. Когда пользователь вводит комбинацию клавиш EOF, вызывается EOFError. Базовая реализация использует встроенную функцию raw_input(); подкласс может заменить её другой реализацией.