Spec-Zone.ru › Python 2.7

Классы интерпретатора кода

Модуль 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, если команда содержит некорректную литерал.

1. Объекты интерпретатора

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). Производные классы должны переопределять этот метод для предоставления соответствующей обработки вывода по мере необходимости.

2. Объекты консоли

Класс 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(); подкласс может заменить её другой реализацией.

© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/2.7/library/code.html

Spec-Zone.ru

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