字符串在`eval`语句中被视为变量

问题描述 投票:1回答:4

我正在尝试将一个非常简单的字符串变量传递到我的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'吗?

python python-3.x syntax undefined
4个回答
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))) 

0
投票

基本上你用'hi'替换%s。

尝试执行len(hi)将导致相同的NameError异常,因为未定义hi。

print(eval("2 + 4 * len(\"%s\")" % condition))

会做的。 screenshot


0
投票

你没有把hi作为一个字符串传递

>>> condition = "'hi'"
>>> print(eval("2 + 4 * len(%s)" % (condition)))
10

0
投票

您需要在%s附近引用,如下所示:

condition = 'hi'
print(eval("2 + 4 * len('%s')" % (condition)))

这样你传递len()字符串'hi'而不是变量hi。

© www.soinside.com 2019 - 2024. All rights reserved.