В оболочке Python, если я типа:Имитировать многострочный поведение оболочки из апи
def a():
И нажмите возвращение, команда не будет оцениваться. Затем он будет оценивать весь блок, как только я закончу его ввод за строкой.
Как известно оболочке python, когда она не должна обрабатывать заданный вход (строка)? Является ли это особенностью python (т. Е. Python может сказать, когда строка кода не завершена) или особенность самой оболочки (на основе regexp, т.е. когда строка заканчивается в двоеточии, ждать большего ввода)?
И как я могу воспроизвести это поведение с помощью python C api? Если я использую метод runSimpleString, он попытается выполнить любой заданный текст, поэтому я не могу реплицировать эту функцию «ожидать большего ввода», которую имеет обычная оболочка python
Вы можете увидеть исходный код для интерактивного интерпретатора в [code.py] (https://github.com/python/cpython/blob/master/Lib/code.py) и [codeop.py] (https : //github.com/python/cpython/blob/master/Lib/codeop.py). –
Спасибо, что очень полезно! Однако как это работает? Я вижу, что python пытается перекомпилировать код при добавлении 1 или 2 строк в случае сбоя и улавливает исключения SyntaxError, но я все равно не получаю его – lezebulon