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

code.md

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

1> **Источник:** https://python-all.ru/3.0/library/code.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `code` – Базовые классы интерпретатора89Модуль `code` предоставляет средства для реализации циклов «чтение-вычисление-вывод» (read-eval-print) в Python. В него входят два класса и вспомогательные функции, которые можно использовать для построения приложений, предоставляющих интерактивное приглашение интерпретатора.1011#### `[code.InteractiveInterpreter]class code.InteractiveInterpreter([locals])`1213Этот класс занимается разбором кода и состоянием интерпретатора (пространством имён пользователя); он не занимается буферизацией ввода, выводом приглашений или именованием входных файлов (имя файла всегда передаётся явно). Необязательный аргумент1415*locals*1617задаёт словарь, в котором будет выполняться код; по умолчанию он равен новому словарю с ключом1819`'__name__'`2021, установленным в2223`'__console__'`2425, и ключом2627`'__doc__'`2829, установленным в3031`None`3233.3435#### `[code.InteractiveConsole]class code.InteractiveConsole([locals[, filename]])`3637Тесно эмулирует поведение интерактивного интерпретатора Python. Этот класс строится на основе3839[`InteractiveInterpreter`](https://python-all.ru/3.0/library/code.html#code.InteractiveInterpreter)4041и добавляет приглашения с помощью знакомых4243`sys.ps1`4445и4647`sys.ps2`4849, а также буферизацию ввода.5051#### `[code.interact]code.interact([banner[, readfunc[, local]]])`5253Удобная функция для запуска цикла чтения-вычисления-вывода. Она создаёт новый экземпляр5455[`InteractiveConsole`](https://python-all.ru/3.0/library/code.html#code.InteractiveConsole)5657и, если указан5859*readfunc*6061, использует его в качестве метода6263`raw_input()`6465. Если указан6667*local*6869, он передаётся конструктору7071[`InteractiveConsole`](https://python-all.ru/3.0/library/code.html#code.InteractiveConsole)7273для использования в качестве пространства имён по умолчанию для цикла интерпретатора. Затем запускается метод7475[`interact()`](https://python-all.ru/3.0/library/code.html#code.interact)7677экземпляра, при этом7879*banner*8081передаётся в качестве баннера, если указан. Консольный объект после использования отбрасывается.8283#### `[code.compile_command]code.compile_command(source[, filename[, symbol]])`8485Эта функция полезна для программ, которые хотят имитировать главный цикл интерпретатора Python (также известный как цикл чтение-вычисление-печать). Сложность заключается в определении того, когда пользователь ввёл неполную команду, которую можно дополнить, введя ещё текст (в отличие от полной команды или синтаксической ошибки). Эта функция *почти* всегда принимает то же решение, что и настоящий главный цикл интерпретатора.8687*source* – строка с исходным кодом; *filename* – необязательное имя файла, из которого был прочитан источник, по умолчанию `'<input>'`; а *symbol* – необязательный начальный символ грамматики, который должен быть либо `'single'` (по умолчанию), либо `'eval'`.8889Возвращает объект кода (то же, что и `compile(source, filename, symbol)`), если команда полная и корректная; `None` – если команда неполная; возбуждает [`SyntaxError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.SyntaxError), если команда полная и содержит синтаксическую ошибку, или возбуждает [`OverflowError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.OverflowError) или [`ValueError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.ValueError), если команда содержит недопустимый литерал.9091## Объекты интерактивного интерпретатора9293#### `[code.InteractiveInterpreter.runsource]InteractiveInterpreter.runsource(source[, filename[, symbol]])`9495Компилирует и выполняет некоторый исходный код в интерпретаторе. Аргументы те же, что и для [`compile_command()`](https://python-all.ru/3.0/library/code.html#code.compile_command); по умолчанию для *filename* используется `'<input>'`, а для *symbol*`'single'`. Может произойти одно из нескольких событий:9697- Входные данные некорректны; [`compile_command()`](https://python-all.ru/3.0/library/code.html#code.compile_command) возбудил исключение ([`SyntaxError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.SyntaxError) или [`OverflowError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.OverflowError)). При вызове метода [`showsyntaxerror()`](https://python-all.ru/3.0/library/code.html#code.InteractiveInterpreter.showsyntaxerror) будет напечатана трассировка синтаксической ошибки. [`runsource()`](https://python-all.ru/3.0/library/code.html#code.InteractiveInterpreter.runsource) возвращает `False`.98- Входные данные неполны, и требуется дополнительный ввод; [`compile_command()`](https://python-all.ru/3.0/library/code.html#code.compile_command) вернула `None`. [`runsource()`](https://python-all.ru/3.0/library/code.html#code.InteractiveInterpreter.runsource) возвращает `True`.99- Входные данные полны; [`compile_command()`](https://python-all.ru/3.0/library/code.html#code.compile_command) вернула объект кода. Код выполняется вызовом [`runcode()`](https://python-all.ru/3.0/library/code.html#code.InteractiveInterpreter.runcode) (который также обрабатывает исключения времени выполнения, за исключением [`SystemExit`](https://python-all.ru/3.0/library/exceptions.html#exceptions.SystemExit)). [`runsource()`](https://python-all.ru/3.0/library/code.html#code.InteractiveInterpreter.runsource) возвращает `False`.100101Возвращаемое значение можно использовать для выбора между `sys.ps1` и `sys.ps2` при выводе приглашения для следующей строки.102103#### `[code.InteractiveInterpreter.runcode]InteractiveInterpreter.runcode(code)`104105Выполняет объект кода. При возникновении исключения вызывается [`showtraceback()`](https://python-all.ru/3.0/library/code.html#code.InteractiveInterpreter.showtraceback) для отображения трассировки. Перехватываются все исключения, кроме [`SystemExit`](https://python-all.ru/3.0/library/exceptions.html#exceptions.SystemExit), которому разрешено распространяться.106107Примечание о [`KeyboardInterrupt`](https://python-all.ru/3.0/library/exceptions.html#exceptions.KeyboardInterrupt): это исключение может возникнуть в других местах этого кода и не всегда перехватывается. Вызывающая сторона должна быть готова к его обработке.108109#### `[code.InteractiveInterpreter.showsyntaxerror]InteractiveInterpreter.showsyntaxerror([filename])`110111Отображает только что возникшую синтаксическую ошибку. Трассировка стека не отображается, так как для синтаксических ошибок её нет. Если передан112113*filename*114115, он вставляется в исключение вместо имени файла по умолчанию, которое предоставляет парсер Python (поскольку при чтении из строки он всегда использует116117`'<string>'`118119). Вывод осуществляется методом120121[`write()`](https://python-all.ru/3.0/library/code.html#code.InteractiveInterpreter.write)122123.124125#### `[code.InteractiveInterpreter.showtraceback]InteractiveInterpreter.showtraceback()`126127Отображает только что возникшее исключение. Первый элемент стека удаляется, так как он относится к реализации объекта интерпретатора. Вывод осуществляется методом128129[`write()`](https://python-all.ru/3.0/library/code.html#code.InteractiveInterpreter.write)130131.132133#### `[code.InteractiveInterpreter.write]InteractiveInterpreter.write(data)`134135Записывает строку в поток стандартной ошибки (136137`sys.stderr`138139). Производные классы должны переопределять этот метод, чтобы обеспечить соответствующую обработку вывода по мере необходимости.140141## Объекты интерактивной консоли142143Класс [`InteractiveConsole`](https://python-all.ru/3.0/library/code.html#code.InteractiveConsole) является подклассом [`InteractiveInterpreter`](https://python-all.ru/3.0/library/code.html#code.InteractiveInterpreter), поэтому он предоставляет все методы объектов интерпретатора, а также следующие дополнения.144145#### `[code.InteractiveConsole.interact]InteractiveConsole.interact([banner])`146147Точно эмулирует интерактивную консоль Python. Необязательный аргумент banner задаёт приветствие, которое выводится перед первым взаимодействием; по умолчанию выводится приветствие, сходное с тем, что печатает стандартный интерпретатор Python, после чего в скобках указывается имя класса объекта консоли (чтобы не путать его с настоящим интерпретатором – настолько он близок!).148149#### `[code.InteractiveConsole.push]InteractiveConsole.push(line)`150151Передаёт строку исходного текста интерпретатору. Строка не должна содержать завершающий символ новой строки; она может содержать внутренние символы новой строки. Строка добавляется в буфер, и вызывается метод интерпретатора152153`runsource()`154155с объединённым содержимым буфера в качестве исходного кода. Если это указывает, что команда была выполнена или недействительна, буфер сбрасывается; в противном случае команда неполная, и буфер остаётся в том виде, в каком он был после добавления строки. Возвращаемое значение равно156157`True`158159, если требуется дополнительный ввод, и160161`False`162163, если строка была обработана каким-либо образом (это то же самое, что и164165`runsource()`166167).168169#### `[code.InteractiveConsole.resetbuffer]InteractiveConsole.resetbuffer()`170171Удаляет любой необработанный исходный текст из входного буфера.172173#### `[code.InteractiveConsole.raw_input]InteractiveConsole.raw_input([prompt])`174175Выводит приглашение и читает строку. Возвращённая строка не включает завершающий символ новой строки. Если пользователь вводит последовательность клавиш EOF, возбуждается исключение176177[`EOFError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.EOFError)178179. Базовая реализация читает из180181`sys.stdin`182183; подкласс может заменить её другой реализацией.184