为什么可以使用带有函数 repr(y) 而不是 str(y) 的 eval()?

Why can you use eval() with the function repr(y) inside and not str(y)?

这是我找到的一些代码,希望有人能解释一下。

如果我将一个字符串分配给变量 y,用 eval 函数对其求值并将内容分配给变量 y2,解释器 returns 为真。

>>> y = 'a string'
>>> y2 = eval(repr(y))
>>> y == y2
>>> True

以这种方式使用 str(y) 的地方:

>>> eval(str(y))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1
a string
       ^
SyntaxError: unexpected EOF while parsing

不允许。这是为什么?

str() 只是 returns 字符串本身,它不像 repr() 那样在其周围加上引号。

y2 = eval(repr(y))

相当于:

y2 = 'a string'

因为 repr() 添加了引号,所以这是有效的。

y2 = eval(str(y))

相当于:

y2 = a string

这显然是无稽之谈,因为没有引号。