我正在尝试将字符串变量非常简单地传递到我的eval
语句中。但是,我的字符串被视为未定义的变量。
这是我的代码:
condition = 'hi'
print(eval("2 + 4 * len(%s)" % (condition)))
输出:
Traceback (most recent call last):
File "C:\test.py", line 3, in <module>
print(eval("4 + 3 * len(%s)" % (condition)))
File "<string>", line 1, in <module>
NameError: name 'hi' is not defined
但是,当我将hi
定义为变量时,代码突然间编译并运行:
condition = 'hi'
hi = 'hi'
print(eval("2 + 4 * len(%s)" % (condition)))
输出:
10
到底是什么?这对我来说似乎完全不直观。有人可以帮我定义condition
的方式,而Python也不要求定义'hi'
吗?
答案 0 :(得分:1)
该%s将被hi
取代。因此,您要让python运行代码:
eval("2 + 4 * len(hi)")
len(hi)
将查找名为“ hi”的变量。您想要的是len('hi')
或len(condition)
。以下是一些可行的替代方法:
# Simplest
print(eval("2 + 4 * len(condition)"))
# Repr gives you the string representation of the object, including quotes
print(eval("2 + 4 * len(%s)" % (repr(condition))))
# Assuming condition doesn't contain '
print(eval("2 + 4 * len('%s')" % (condition)))
答案 1 :(得分:0)
基本上,您是用“ hi”代替%s。
尝试执行len(hi)将导致与未定义hi相同的NameError异常。
print(eval("2 + 4 * len(\"%s\")" % condition))
将完成这项工作。 screenshot
答案 2 :(得分:0)
您没有将hi
作为字符串传递
>>> condition = "'hi'"
>>> print(eval("2 + 4 * len(%s)" % (condition)))
10
答案 3 :(得分:0)
您需要在%s周围加上引号,例如:
condition = 'hi'
print(eval("2 + 4 * len('%s')" % (condition)))
通过这种方式,您将一个字符串“ hi”(而不是变量hi)传递给len()。