Класс, производный от code
. Не содержит дополнительных переменных экземпляра.¶
Класс, производный от Lib/code.py. Не содержит дополнительных переменных экземпляра.
Класс, производный от code
. Не содержит дополнительных переменных экземпляра.
- class code.InteractiveInterpreter(locals=None)¶
Класс, производный от
'__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, если они предусмотрены. Объект console удаляется после использования.Изменено в версии 3.6: Добавлен параметр exitmsg.
- code.compile_command(source, filename='<input>', symbol='single')¶
Эта функция полезна для программ, которые хотят эмулировать основной цикл интерпретатора Python (он же цикл чтения-вычисления-печати). Сложность заключается в том, чтобы определить, когда пользователь ввел неполную команду, которую можно завершить, введя дополнительный текст (в отличие от полной команды или синтаксической ошибки). Эта функция почти всегда принимает то же решение, что и основной цикл реального интерпретатора.
source - строка исходного кода; filename - необязательное имя файла, из которого был прочитан исходный код, значение по умолчанию
'<input>'
; и symbol - необязательный начальный символ грамматики, который должен быть'single'
(по умолчанию),'eval'
или'exec'
.Возвращает объект кода (такой же, как
compile(source, filename, symbol)
), если команда завершена и допустима;None
, если команда не завершена; возвращаетSyntaxError
, если команда завершена и содержит синтаксическую ошибку, или возвращаетOverflowError
илиValueError
, если команда содержит недопустимый литерал.
Интерактивные объекты интерпретатора¶
- 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()
возвращен объект code. Код выполняется путем вызова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
). Производные классы должны переопределить это, чтобы обеспечить соответствующую обработку выходных данных по мере необходимости.
Интерактивные консольные объекты¶
Класс InteractiveConsole
является подклассом InteractiveInterpreter
и поэтому предлагает все методы объектов интерпретатора, а также следующие дополнения.
- InteractiveConsole.interact(banner=None, exitmsg=None)¶
Тщательно имитируйте интерактивную консоль Python. Необязательный аргумент banner указывает баннер для печати перед первым взаимодействием; по умолчанию он печатает баннер, аналогичный тому, который печатается стандартным интерпретатором Python, за которым следует имя класса объекта console в круглых скобках (чтобы не путать его с реальным интерпретатором - поскольку это так близко!).
Необязательный аргумент exitmsg указывает, какое сообщение о выходе будет выводиться при выходе. Передайте пустую строку, чтобы исключить сообщение о выходе. Если exitmsg не задано или
None
, будет выводиться сообщение по умолчанию.Изменено в версии 3.4: Чтобы запретить печать любого баннера, введите пустую строку.
Изменено в версии 3.6: Распечатайте сообщение о выходе при выходе из системы.
- InteractiveConsole.push(line)¶
Вставьте строку исходного текста в интерпретатор. В строке не должно быть завершающей новой строки; в ней могут быть внутренние новые строки. Строка добавляется в буфер, и вызывается метод интерпретатора
runsource()
с объединенным содержимым буфера в качестве источника. Если это указывает на то, что команда была выполнена или недействительна, буфер сбрасывается; в противном случае команда является неполной, и буфер остается таким, каким он был после добавления строки. Возвращаемое значение равноTrue
, если требуется дополнительный ввод,False
, если строка была каким-либо образом обработана (это то же самое, что иrunsource()
).
- InteractiveConsole.resetbuffer()¶
Удалите весь необработанный исходный текст из входного буфера.
- InteractiveConsole.raw_input(prompt='')¶
Введите запрос и прочитайте строку. Возвращаемая строка не содержит завершающей новой строки. Когда пользователь вводит последовательность клавиш EOF, выводится значение
EOFError
. Базовая реализация считывает данные изsys.stdin
; подкласс может заменить это другой реализацией.