【发布时间】:2018-07-03 15:46:10
【问题描述】:
我对 python 的 eval() 很困惑:
我尝试了eval('"\x27"') == eval('"\\x27"'),结果为True。有人可以解释为什么会这样吗?两个表达式都计算为"'"。我明白为什么eval('"\x27"') 会这样做(评估的字符串有一个字符,它是一个转义的十六进制表示撇号),但eval('"\\x27"') 不应该等于"\\x27"?
其次,增加混乱,如果我设置以下变量,
s = "\x27"
t = "\\x27"
那么eval('s') 又是"'",但eval('t') 是"\\x27"。这是为什么呢?
【问题讨论】:
-
避免使用
eval的原因#5:即使是简单的字符串文字也变得难以阅读。 -
eval('"\\\\x27"') equals "\\x27"你需要双重转义反斜杠 -
一个变成 eval("'"),另一个变成 eval("\x27")。 Eval 本身会进行一定程度的非转义,因此它们将是相等的。
标签: python python-3.x