我正在尝试将一个非常简单的字符串变量传递到我的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'
吗?
%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)))
基本上你用'hi'替换%s。
尝试执行len(hi)将导致相同的NameError异常,因为未定义hi。
print(eval("2 + 4 * len(\"%s\")" % condition))
会做的。 screenshot
你没有把hi
作为一个字符串传递
>>> condition = "'hi'"
>>> print(eval("2 + 4 * len(%s)" % (condition)))
10
您需要在%s附近引用,如下所示:
condition = 'hi'
print(eval("2 + 4 * len('%s')" % (condition)))
这样你传递len()字符串'hi'而不是变量hi。