Ошибка при создании функций в моем Python в Python - PullRequest
0 голосов
/ 01 сентября 2018

Я сделал код. Он работает так, как будто мы работаем с оригинальным питоном. Он использует eval и exec. Когда я пытаюсь сделать функцию или любое выражение if, оно не работает. Вот код:

print("Python\n")
while True:
    command =input(">>> ")
    if command == "quit()":break
    try:
        try:
            eval(command)
        except:
            exec(command)
    except Exception as err:
        print("Exception: "+str(err))

Продолжительность:

Python

>>> a = input("Enter your name: ")
Enter your name: abc
>>> print(a)
abc
>>> if True:
Exception: unexpected EOF while parsing (<string>, line 1)
>>> if True:print(a);if a == "abc":print("Great Abc")
Exception: invalid syntax (<string>, line 1)
>>> 

Ответы [ 2 ]

0 голосов
/ 01 сентября 2018

Eval fuction вычисляет однострочный код, если для оператора требуется минимум 2 строки (с отступом). Попробуйте лямбда-выражение

lambda x: True if a == True else False
0 голосов
/ 01 сентября 2018

Поскольку вы обрабатываете только одну строку за раз, интерпретатор python выдает ошибку, если вы пишете только if True:. В обычном интерпретаторе это вызовет многострочное редактирование и начнет выполняться только тогда, когда вы создадите пустую строку.

Если вы, с другой стороны, поместите что-то после оператора if, это сработает (например, if True: print("true")), но вы не можете связывать операторы if друг с другом, как пытаетесь это сделать. Однако вы можете связать обычные операторы, такие как if True:print("first line");print("second line").

Та же проблема касается функций. Они должны иметь оператор, следующий за определением, прежде чем их можно будет интерпретировать, и обычно вам будет разрешено набрать это определение до того, как функция будет прочитана.

Вы можете изменить свой код, чтобы учесть это поведение, чтобы, если строка заканчивается на :, вы продолжали читать ввод и выполняли его только после того, как пустая строка была передана в качестве ввода.

...