Python 3我希望我的exec函数能够解析为列表中的字符串

时间:2019-11-25 16:04:41

标签: python python-3.x exec

line1 = "class A:\n\tpass"
line2 = "class B:\n\tpass" 
line3 = "class C:\n\tpass"
line4 = "print(issubclass(C,A) and issubclass(C,B))"

exec(line1...4)导致"False"正确打印到控制台。

但是,如果我这样:

myList = [str(exec(line4))]
print(myList)

myList中的字符串是"None",在这里我希望它是控制台上打印的"False"

我尝试过aVariable = exec(line4),但这也会打印“无”。

欢迎任何帮助。

我是Python的新手,我觉得我缺少一个细微差别。

谢谢!

2 个答案:

答案 0 :(得分:3)

打印 退回 不同。根据文档,exec 总是返回None

  

[...]返回值为None

使用类似eval的方法也无济于事,因为您的行也计算为None(我重复: printing 不同返回

如果您想实际捕获正在打印的内容,请查看this other SO question


如果您要实际上是返回而不是 print ,则相应地更改行:

line4 = "issubclass(C,A) and issubclass(C,B)"

然后使用eval

myValue = eval(line4)
# myValue = False

答案 1 :(得分:-1)

您想要用eval而不是exec,至于您为什么这样做,我无法理解,但不会询问:(而且您的line4永远不会评估为布尔值,因为它是打印内容,也不会返回任何值):< / p>

line4 = 'myList = [str(issubclass(C,A) and issubclass(C,B))]'

执行第一行以创建您的类,然后执行eval line4:  对于某些原因列表的理解未分配,因此:

exec(line1)
exec(line2)
exec(line3)
exec(line4)

myList                                                                                                                                                                                           

出局[44]:['假']