为什么你可以在内部使用函数repr(y)而不是str(y)使用eval()?

时间:2015-05-19 01:32:11

标签: python string eval repr

以下是我发现并希望有人解释的一些代码。

如果我将一个字符串赋给变量y,用eval函数计算它并将内容分配给变量y2,解释器返回true。

>>> 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

是不允许的。那是为什么?

1 个答案:

答案 0 :(得分:5)

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

y2 = eval(repr(y))

相当于:

y2 = 'a string'

由于repr()添加了引号,因此这是有效的。

y2 = eval(str(y))

相当于:

y2 = a string

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