code
— Interpreter base classes¶
Вихідний код: Lib/code.py
Модуль code
надає засоби для реалізації циклів читання-оцінки-друку в Python. Включено два класи та додаткові функції, які можна використовувати для створення програм, які надають інтерактивну підказку інтерпретатора.
- class code.InteractiveInterpreter(locals=None)¶
This class deals with parsing and interpreter state (the user’s namespace); it does not deal with input buffering or prompting or input file naming (the filename is always passed in explicitly). The optional locals argument specifies a mapping to use as the namespace in which code will be executed; it defaults to a newly created dictionary with key
'__name__'
set to'__console__'
and key'__doc__'
set toNone
.
- class code.InteractiveConsole(locals=None, filename='<console>', local_exit=False)¶
Closely emulate the behavior of the interactive Python interpreter. This class builds on
InteractiveInterpreter
and adds prompting using the familiarsys.ps1
andsys.ps2
, and input buffering. If local_exit is true,exit()
andquit()
in the console will not raiseSystemExit
, but instead return to the calling code.Змінено в версії 3.13: Added local_exit parameter.
- code.interact(banner=None, readfunc=None, local=None, exitmsg=None, local_exit=False)¶
Convenience function to run a read-eval-print loop. This creates a new instance of
InteractiveConsole
and sets readfunc to be used as theInteractiveConsole.raw_input()
method, if provided. If local is provided, it is passed to theInteractiveConsole
constructor for use as the default namespace for the interpreter loop. If local_exit is provided, it is passed to theInteractiveConsole
constructor. Theinteract()
method of the instance is then run with banner and exitmsg passed as the banner and exit message to use, if provided. The console object is discarded after use.Змінено в версії 3.6: Додано параметр exitmsg.
Змінено в версії 3.13: Added local_exit parameter.
- code.compile_command(source, filename='<input>', symbol='single')¶
Ця функція корисна для програм, які хочуть емулювати основний цикл інтерпретатора Python (він же цикл читання-оцінки-друку). Складна частина полягає в тому, щоб визначити, коли користувач ввів неповну команду, яку можна завершити введенням додаткового тексту (на відміну від повної команди чи синтаксичної помилки). Ця функція майже завжди приймає те саме рішення, що й основний цикл реального інтерпретатора.
джерело - вихідний рядок; ім’я файлу — необов’язкове ім’я файлу, з якого було прочитано джерело, за умовчанням
' <input> ''
; і symbol є необов’язковим символом початку граматики, який має бути'single'
(за замовчуванням),'eval'
або'exec'
.Повертає об’єкт коду (те саме, що
compile(source, filename, symbol)
), якщо команда повна та дійсна;None
, якщо команда неповна; викликаєSyntaxError
, якщо команда завершена та містить синтаксичну помилку, або викликаєOverflowError
абоValueError
, якщо команда містить недійсний літерал.
Об’єкти інтерактивного інтерпретатора¶
- InteractiveInterpreter.runsource(source, filename='<input>', symbol='single')¶
Скомпілюйте та запустіть деяке джерело в інтерпретаторі. Аргументи такі самі, як і для
compile_command()
; за замовчуванням для ім’я файлу є' <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=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, а потім ім’я класу консольного об’єкта в дужках (щоб не сплутати це зі справжнім інтерпретатором, оскільки він дуже близький!).
Необов’язковий аргумент exitmsg визначає повідомлення про вихід, яке друкується під час виходу. Передайте порожній рядок, щоб приховати повідомлення про вихід. Якщо exitmsg не вказано або
None
, буде надруковано повідомлення за замовчуванням.Змінено в версії 3.4: Щоб заборонити друк будь-якого банера, передайте порожній рядок.
Змінено в версії 3.6: Друк повідомлення про вихід під час виходу.
- InteractiveConsole.push(line)¶
Push a line of source text to the interpreter. The line should not have a trailing newline; it may have internal newlines. The line is appended to a buffer and the interpreter’s
runsource()
method is called with the concatenated contents of the buffer as source. If this indicates that the command was executed or invalid, the buffer is reset; otherwise, the command is incomplete, and the buffer is left as it was after the line was appended. The return value isTrue
if more input is required,False
if the line was dealt with in some way (this is the same asrunsource()
).
- InteractiveConsole.resetbuffer()¶
Видаліть будь-який необроблений вихідний текст із вхідного буфера.