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

code.md

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

1> **Источник:** https://python-all.ru/3.16/library/code.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `code` – Базовые классы интерпретатора89**Исходный код:** [Lib/code.py](https://python-all.ru/src/main/Lib/code.py)1011---1213Модуль `code` предоставляет средства для реализации циклов чтение-вычисление-печать в Python. Включены два класса и вспомогательные функции, которые можно использовать для создания приложений, предоставляющих интерактивное приглашение интерпретатора.1415#### `class code.InteractiveInterpreter(locals=None)`1617Этот класс занимается разбором и состоянием интерпретатора (пространство имён пользователя); он не занимается буферизацией ввода, выводом приглашения или именованием входных файлов (имя файла всегда передаётся явно). Необязательный аргумент *locals* задаёт отображение, используемое в качестве пространства имён, в котором будет выполняться код; по умолчанию это вновь созданный словарь с ключом `'__name__'`, установленным в `'__console__'`, и ключом `'__doc__'`, установленным в `None`.1819Обратите внимание, что функции и объекты классов, созданные в экземпляре `InteractiveInterpreter`, будут принадлежать пространству имён, заданному в *locals*. Они поддаются сериализации (pickleable) только если *locals* является пространством имён существующего модуля.2021#### `class code.InteractiveConsole(locals=None, filename='<console>', *, local_exit=False)`2223Тесно имитирует поведение интерактивного интерпретатора Python. Этот класс основан на [`InteractiveInterpreter`](https://python-all.ru/3.16/library/code.html#code.InteractiveInterpreter) и добавляет вывод приглашения с помощью знакомых `sys.ps1` и `sys.ps2`, а также буферизацию ввода. Если *local\_exit* истинно, `exit()` и `quit()` в консоли не будут вызывать [`SystemExit`](https://python-all.ru/3.16/library/exceptions.html#SystemExit), а вместо этого вернут управление вызывающему коду.2425Изменено в версии 3.13: Добавлен параметр *local\_exit*.2627#### `code.interact(banner=None, readfunc=None, local=None, exitmsg=None, local_exit=False)`2829Вспомогательная функция для запуска цикла чтение-вычисление-печать. Она создаёт новый экземпляр [`InteractiveConsole`](https://python-all.ru/3.16/library/code.html#code.InteractiveConsole) и, если указан, устанавливает *readfunc* в качестве метода [`InteractiveConsole.raw_input()`](https://python-all.ru/3.16/library/code.html#code.InteractiveConsole.raw_input). Если указан *local*, он передаётся конструктору `InteractiveConsole` для использования в качестве пространства имён по умолчанию для цикла интерпретатора. Если указан *local\_exit*, он передаётся конструктору `InteractiveConsole`. Затем запускается метод [`interact()`](https://python-all.ru/3.16/library/code.html#code.InteractiveConsole.interact) экземпляра, которому передаются *banner* и *exitmsg* в качестве баннера и сообщения о выходе, если они указаны. Объект консоли отбрасывается после использования.3031Изменено в версии 3.6: Добавлен параметр *exitmsg*.3233Изменено в версии 3.13: Добавлен параметр *local\_exit*.3435#### `code.compile_command(source, filename='<input>', symbol='single')`3637Эта функция полезна для программ, которые хотят имитировать главный цикл интерпретатора Python (также известный как цикл чтение-вычисление-печать). Сложность заключается в определении того, когда пользователь ввёл неполную команду, которую можно дополнить, введя ещё текст (в отличие от полной команды или синтаксической ошибки). Эта функция *почти* всегда принимает то же решение, что и настоящий главный цикл интерпретатора.3839*source* – это строка исходного кода; *filename* – необязательное имя файла, из которого был прочитан исходный код, по умолчанию `'<input>'`; а *symbol* – необязательный начальный символ грамматики, который должен быть `'single'` (по умолчанию), `'eval'` или `'exec'`.4041Возвращает объект кода (тот же, что и `compile(source, filename, symbol)`), если команда полная и корректная; `None`, если команда неполная; возбуждает [`SyntaxError`](https://python-all.ru/3.16/library/exceptions.html#SyntaxError), если команда полная и содержит синтаксическую ошибку, или возбуждает [`OverflowError`](https://python-all.ru/3.16/library/exceptions.html#OverflowError) или [`ValueError`](https://python-all.ru/3.16/library/exceptions.html#ValueError), если команда содержит недопустимый литерал.4243## Объекты интерактивного интерпретатора4445#### `InteractiveInterpreter.runsource(source, filename='<input>', symbol='single')`4647Компилирует и выполняет некоторый исходный код в интерпретаторе. Аргументы те же, что и для [`compile_command()`](https://python-all.ru/3.16/library/code.html#code.compile_command); по умолчанию для *filename* используется `'<input>'`, а для *symbol*`'single'`. Может произойти одно из нескольких событий:4849- Входные данные некорректны; [`compile_command()`](https://python-all.ru/3.16/library/code.html#code.compile_command) вызвал исключение ([`SyntaxError`](https://python-all.ru/3.16/library/exceptions.html#SyntaxError) или [`OverflowError`](https://python-all.ru/3.16/library/exceptions.html#OverflowError)). Трассировка синтаксической ошибки будет выведена при вызове метода [`showsyntaxerror()`](https://python-all.ru/3.16/library/code.html#code.InteractiveInterpreter.showsyntaxerror). `runsource()` возвращает `False`.50- Входные данные неполны и требуется дополнительный ввод; [`compile_command()`](https://python-all.ru/3.16/library/code.html#code.compile_command) вернул `None`. `runsource()` возвращает `True`.51- Входные данные полны; [`compile_command()`](https://python-all.ru/3.16/library/code.html#code.compile_command) вернул объект кода. Код выполняется вызовом [`runcode()`](https://python-all.ru/3.16/library/code.html#code.InteractiveInterpreter.runcode) (который также обрабатывает исключения времени выполнения, за исключением [`SystemExit`](https://python-all.ru/3.16/library/exceptions.html#SystemExit)). `runsource()` возвращает `False`.5253Возвращаемое значение можно использовать для решения, использовать ли `sys.ps1` или `sys.ps2` для вывода приглашения следующей строки.5455#### `InteractiveInterpreter.runcode(code)`5657Выполняет объект кода. Когда возникает исключение, вызывается [`showtraceback()`](https://python-all.ru/3.16/library/code.html#code.InteractiveInterpreter.showtraceback) для отображения трассировки. Перехватываются все исключения, кроме [`SystemExit`](https://python-all.ru/3.16/library/exceptions.html#SystemExit), которому разрешено распространяться.5859Примечание о [`KeyboardInterrupt`](https://python-all.ru/3.16/library/exceptions.html#KeyboardInterrupt): это исключение может возникнуть в другом месте этого кода и может быть не всегда перехвачено. Вызывающий код должен быть готов обработать его.6061#### `InteractiveInterpreter.showsyntaxerror(filename=None)`6263Отображает только что возникшую синтаксическую ошибку. При этом не отображается стек вызовов, поскольку для синтаксических ошибок его нет. Если указан *filename*, он вставляется в исключение вместо имени файла по умолчанию, предоставленного синтаксическим анализатором Python, поскольку тот всегда использует `'<string>'` при чтении из строки. Вывод осуществляется методом [`write()`](https://python-all.ru/3.16/library/code.html#code.InteractiveInterpreter.write).6465#### `InteractiveInterpreter.showtraceback()`6667Отображает только что произошедшее исключение. Первый элемент стека удаляется, поскольку он находится в реализации объекта интерпретатора. Вывод записывается методом [`write()`](https://python-all.ru/3.16/library/code.html#code.InteractiveInterpreter.write).6869Изменено в версии 3.5: Вместо только основной трассировки отображается полная цепочка трассировки.7071#### `InteractiveInterpreter.write(data)`7273Записывает строку в поток стандартных ошибок (`sys.stderr`). Производные классы должны переопределить этот метод, чтобы обеспечить соответствующую обработку вывода по мере необходимости.7475## Объекты интерактивной консоли7677Класс [`InteractiveConsole`](https://python-all.ru/3.16/library/code.html#code.InteractiveConsole) является подклассом [`InteractiveInterpreter`](https://python-all.ru/3.16/library/code.html#code.InteractiveInterpreter) и, следовательно, предоставляет все методы объектов интерпретатора, а также следующие дополнения.7879#### `InteractiveConsole.interact(banner=None, exitmsg=None)`8081Точно эмулирует интерактивную консоль Python. Необязательный аргумент *banner* задает баннер, который выводится перед первым взаимодействием; по умолчанию выводится баннер, похожий на тот, что выводится стандартным интерпретатором Python, после которого в скобках указывается имя класса объекта консоли (чтобы не путать с настоящим интерпретатором – настолько он близок к нему!).8283Необязательный аргумент *exitmsg* задает сообщение о выходе, выводимое при завершении. Передайте пустую строку, чтобы подавить сообщение о выходе. Если *exitmsg* не указан или `None`, выводится сообщение по умолчанию.8485Изменено в версии 3.4: Чтобы не выводить никакой баннер, передайте пустую строку.8687Изменено в версии 3.6: Выводить сообщение о выходе при завершении.8889#### `InteractiveConsole.push(line)`9091Передает строку исходного текста интерпретатору. Строка не должна содержать завершающего перевода строки; в ней могут быть внутренние переводы строк. Строка добавляется в буфер, и метод [`runsource()`](https://python-all.ru/3.16/library/code.html#code.InteractiveInterpreter.runsource) интерпретатора вызывается с объединенным содержимым буфера в качестве исходного кода. Если это указывает на то, что команда выполнена или некорректна, буфер сбрасывается; в противном случае команда неполна, и буфер остается в том же состоянии, что и после добавления строки. Возвращаемое значение равно `True`, если требуется дополнительный ввод, `False`, если строка была обработана каким-либо образом (это то же самое, что `runsource()`).9293#### `InteractiveConsole.resetbuffer()`9495Удаляет любой необработанный исходный текст из входного буфера.9697#### `InteractiveConsole.raw_input(prompt='')`9899Выводит приглашение и считывает строку. Возвращаемая строка не включает завершающий символ новой строки. Если пользователь вводит последовательность клавиш EOF, возникает [`EOFError`](https://python-all.ru/3.16/library/exceptions.html#EOFError). Базовая реализация читает из `sys.stdin`; подкласс может заменить это на другую реализацию.100