如何在Python中将字符串转换为源代码?

12

正如您所看到的,如果ifinner是一个字符串,那么如果我在if后面写任何内容,它都将为真。我该怎么办,才能将其转换为源代码?

    x=2
    ifinner = "x==3"
    if ifinner:
        print("Yeah")
    else:
        print("It works!")

你应该解析字符串并处理不同的条件选项。 - b-fg
1
你为什么不使用在你的例子中有效的 ifinner = x == 3 呢? - Kevin
1
在实际情况中,字符串从哪里来? - jonrsharpe
3个回答

21

你可以使用 eval() 函数来评估 Python 源代码。

引用文档:

eval(expression, globals=None, locals=None)

参数是一个字符串和可选的 globalslocals。如果提供了,全局变量必须是字典类型。如果提供了,locals 可以是任何映射对象。


8
但是绝对不要在任何你没有亲自创建的字符串上使用eval(或来自可信来源的字符串)! - MSeifert

2

试试这个:

exec ("%s == 3" % x)

如果需要详细信息,请阅读Python 2.x/3.x中eval和exec的文档。

之前有类似的问题被问到过。这里是链接


2

我认为eval不能处理这样的字符串

str_ = "import matplotlib"

在这种情况下,您可能需要打开一个单独的文件,编写字符串,然后执行它。

1
你可以使用 exec 来执行这个字符串。例如,尝试以下代码:exec("import matplotlib.pyplot as mp"); mp.plot([1,2,3],[-1,0,1]); mp.show()不会出现错误。但是你说的没错,eval 不适合执行这个字符串。 - AmirHosein Sadeghimanesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接