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

code.md

80 строк · 13.6 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/2.7/library/code.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 29.1. [`code`](https://python-all.ru/2.7/library/code.html#module-code) – Базовые классы интерпретатора89Модуль `code` предоставляет средства для реализации циклов чтение-вычисление-печать в Python. Включены два класса и вспомогательные функции, которые можно использовать для создания приложений, предоставляющих интерактивное приглашение интерпретатора.1011#### `class code.InteractiveInterpreter([locals])`1213Этот класс занимается разбором и состоянием интерпретатора (пространством имён пользователя); он не занимается буферизацией ввода, подсказками или именованием входных файлов (имя файла всегда передаётся явно). Необязательный аргумент *locals* задаёт словарь, в котором будет выполняться код; по умолчанию создаётся новый словарь с ключом `'__name__'`, установленным в `'__console__'`, и ключом `'__doc__'`, установленным в `None`.1415#### `class code.InteractiveConsole([locals[, filename]])`1617Тесно эмулирует поведение интерактивного интерпретатора Python. Этот класс основан на [`InteractiveInterpreter`](https://python-all.ru/2.7/library/code.html#code.InteractiveInterpreter) и добавляет подсказки с помощью знакомых `sys.ps1` и `sys.ps2`, а также буферизацию ввода.1819#### `code.interact([banner[, readfunc[, local]]])`2021Удобная функция для запуска цикла чтение-вычисление-печать. Она создаёт новый экземпляр [`InteractiveConsole`](https://python-all.ru/2.7/library/code.html#code.InteractiveConsole) и устанавливает *readfunc* для использования в качестве метода [`InteractiveConsole.raw_input()`](https://python-all.ru/2.7/library/code.html#code.InteractiveConsole.raw_input), если он указан. Если передан *local*, он передаётся конструктору [`InteractiveConsole`](https://python-all.ru/2.7/library/code.html#code.InteractiveConsole) для использования в качестве пространства имён по умолчанию для цикла интерпретатора. Затем метод [`interact()`](https://python-all.ru/2.7/library/code.html#code.interact) экземпляра выполняется с *banner*, если он указан. Объект консоли отбрасывается после использования.2223#### `code.compile_command(source[, filename[, symbol]])`2425Эта функция полезна для программ, которые хотят имитировать главный цикл интерпретатора Python (также известный как цикл чтение-вычисление-печать). Сложность заключается в определении того, когда пользователь ввёл неполную команду, которую можно дополнить, введя ещё текст (в отличие от полной команды или синтаксической ошибки). Эта функция *почти* всегда принимает то же решение, что и настоящий главный цикл интерпретатора.2627*source* – строка исходного кода; *filename* – необязательное имя файла, из которого был прочитан исходный код, по умолчанию `'<input>'`; а *symbol* – необязательный начальный символ грамматики, который должен быть `'single'` (по умолчанию) или `'eval'`.2829Возвращает объект кода (тот же, что и `compile(source, filename, symbol)`), если команда полная и корректная; `None`, если команда неполная; возбуждает [`SyntaxError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.SyntaxError), если команда полная и содержит синтаксическую ошибку, или возбуждает [`OverflowError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.OverflowError) или [`ValueError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.ValueError), если команда содержит недопустимый литерал.3031## 29.1.1. Объекты интерактивного интерпретатора3233#### `InteractiveInterpreter.runsource(source[, filename[, symbol]])`3435Компилирует и выполняет некоторый исходный код в интерпретаторе. Аргументы те же, что и для [`compile_command()`](https://python-all.ru/2.7/library/code.html#code.compile_command); значение по умолчанию для *filename*`'<input>'`, а для *symbol*`'single'`. Может произойти одно из нескольких событий:3637- Входные данные некорректны; [`compile_command()`](https://python-all.ru/2.7/library/code.html#code.compile_command) вызвал исключение ([`SyntaxError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.SyntaxError) или [`OverflowError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.OverflowError)). Трассировка синтаксической ошибки будет выведена при вызове метода [`showsyntaxerror()`](https://python-all.ru/2.7/library/code.html#code.InteractiveInterpreter.showsyntaxerror). [`runsource()`](https://python-all.ru/2.7/library/code.html#code.InteractiveInterpreter.runsource) возвращает `False`.38- Входные данные неполны и требуется дополнительный ввод; [`compile_command()`](https://python-all.ru/2.7/library/code.html#code.compile_command) вернул `None`. [`runsource()`](https://python-all.ru/2.7/library/code.html#code.InteractiveInterpreter.runsource) возвращает `True`.39- Входные данные полны; [`compile_command()`](https://python-all.ru/2.7/library/code.html#code.compile_command) вернул объект кода. Код выполняется вызовом [`runcode()`](https://python-all.ru/2.7/library/code.html#code.InteractiveInterpreter.runcode) (который также обрабатывает исключения времени выполнения, за исключением [`SystemExit`](https://python-all.ru/2.7/library/exceptions.html#exceptions.SystemExit)). [`runsource()`](https://python-all.ru/2.7/library/code.html#code.InteractiveInterpreter.runsource) возвращает `False`.4041Возвращаемое значение можно использовать для решения, использовать ли `sys.ps1` или `sys.ps2` для вывода приглашения следующей строки.4243#### `InteractiveInterpreter.runcode(code)`4445Выполняет объект кода. Когда возникает исключение, вызывается [`showtraceback()`](https://python-all.ru/2.7/library/code.html#code.InteractiveInterpreter.showtraceback) для отображения трассировки. Перехватываются все исключения, кроме [`SystemExit`](https://python-all.ru/2.7/library/exceptions.html#exceptions.SystemExit), которому разрешено распространяться.4647Примечание о [`KeyboardInterrupt`](https://python-all.ru/2.7/library/exceptions.html#exceptions.KeyboardInterrupt): это исключение может возникнуть в другом месте этого кода и может быть не всегда перехвачено. Вызывающий код должен быть готов обработать его.4849#### `InteractiveInterpreter.showsyntaxerror([filename])`5051Отображает только что возникшую синтаксическую ошибку. При этом не отображается стек вызовов, поскольку для синтаксических ошибок его нет. Если указан *filename*, он вставляется в исключение вместо имени файла по умолчанию, предоставленного синтаксическим анализатором Python, поскольку тот всегда использует `'<string>'` при чтении из строки. Вывод осуществляется методом [`write()`](https://python-all.ru/2.7/library/code.html#code.InteractiveInterpreter.write).5253#### `InteractiveInterpreter.showtraceback()`5455Отображает только что произошедшее исключение. Первый элемент стека удаляется, поскольку он находится в реализации объекта интерпретатора. Вывод записывается методом [`write()`](https://python-all.ru/2.7/library/code.html#code.InteractiveInterpreter.write).5657#### `InteractiveInterpreter.write(data)`5859Записывает строку в поток стандартных ошибок (`sys.stderr`). Производные классы должны переопределить этот метод, чтобы обеспечить соответствующую обработку вывода по мере необходимости.6061## 29.1.2. Объекты интерактивной консоли6263Класс [`InteractiveConsole`](https://python-all.ru/2.7/library/code.html#code.InteractiveConsole) является подклассом [`InteractiveInterpreter`](https://python-all.ru/2.7/library/code.html#code.InteractiveInterpreter) и, следовательно, предоставляет все методы объектов интерпретатора, а также следующие дополнения.6465#### `InteractiveConsole.interact([banner])`6667Точно эмулирует интерактивную консоль Python. Необязательный аргумент banner задаёт приветствие, которое выводится перед первым взаимодействием; по умолчанию выводится приветствие, сходное с тем, что печатает стандартный интерпретатор Python, после чего в скобках указывается имя класса объекта консоли (чтобы не путать его с настоящим интерпретатором – настолько он близок!).6869#### `InteractiveConsole.push(line)`7071Передает строку исходного текста интерпретатору. Строка не должна содержать завершающего перевода строки; в ней могут быть внутренние переводы строк. Строка добавляется в буфер, и метод `runsource()` интерпретатора вызывается с объединенным содержимым буфера в качестве исходного кода. Если это указывает на то, что команда выполнена или некорректна, буфер сбрасывается; в противном случае команда неполна, и буфер остается в том же состоянии, что и после добавления строки. Возвращаемое значение равно `True`, если требуется дополнительный ввод, `False`, если строка была обработана каким-либо образом (это то же самое, что `runsource()`).7273#### `InteractiveConsole.resetbuffer()`7475Удаляет любой необработанный исходный текст из входного буфера.7677#### `InteractiveConsole.raw_input([prompt])`7879Выводит приглашение и читает строку. Возвращаемая строка не содержит завершающего символа новой строки. Когда пользователь вводит комбинацию клавиш EOF, вызывается [`EOFError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.EOFError). Базовая реализация использует встроенную функцию [`raw_input()`](https://python-all.ru/2.7/library/functions.html#raw_input); подкласс может заменить её другой реализацией.80