为什么这个使用eval函数的python代码不会产生错误?

时间:2018-05-17 09:20:55

标签: python python-3.x

我是python的初学者。在Think Python中解决练习时发现了这一点。在此代码中,eval_loop函数迭代地提示用户,获取结果输入并使用eval对其进行评估,并打印结果。 它应该一直持续到用户输入'done',然后返回它评估的最后一个表达式的值。我怀疑是:

Eval必须有一个字符串作为其参数,但是这个代码即使在我们输入非字符串如5 + 4时也能工作,它会打印9.因为我们没有将输入转换成字符串,请告诉我它是怎么回事产生错误?

def eval_loop():
    result=0
    while True:
        s = input('>>>')
        if s == 'done':
            break
        result = eval(s)
        print(result)
    print(result)


eval_loop()

更新

好的,我现在得到它,函数输入返回一个字符串。但现在我又有一个疑问:

如果输入函数返回一个字符串,那么当我输入-hello时,为什么它会产生错误,而周围没有任何引号。它给出NameError:未定义名称'hello'。如果输入返回一个字符串也不应该将其转换为字符串吗?

有人请帮助我,这变得非常混乱。 :(

1 个答案:

答案 0 :(得分:0)

eval()用于将字符串计算为python表达式

print eval("3 + 2")
#5
a = 9
print eval("a == 9")
#true

你也可以使用raw_input()而不是input()来读取字符串