Spec-Zone.ru › Python 3.6

классы интерпретатора 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API