我做了一个代码。它就像我们运行原始python一样。它使用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)
>>>
由于您一次只处理一行,如果您只编写if True:
,python解释器会抛出错误。在普通的解释器中,这将触发多行编辑,并且只在您创建空行时才开始执行。
另一方面,如果你在if语句之后添加一些东西它会起作用(例如if True: print("true")
)但你不能像你试图那样将if语句链接起来。但是你可以链接像if True:print("first line");print("second line")
这样的正常语句。
功能也是同样的问题。在解释之前,它们需要在定义之后有一个语句,并且通常可以在函数被读取之前键入该定义。
你可以改变你的代码以允许这种行为,这样如果一行以:
结尾,你应该继续读取输入,只有在输入空行后才执行它。
Eval函数评估一行代码,if语句需要最少2行(带缩进)。尝试lambda表达式
lambda x: True if a == True else False