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

Python 3 I'd like my exec function to resolve to a string in a list

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) 但这也打印了 "None"。

欢迎任何帮助。

我是 Python 的新手,我觉得我遗漏了一个细微差别。

提前致谢!

你想要 eval 而不是 exec,至于你为什么这样做我不明白但不会问:(另外你的 line4 永远不会评估为布尔值,因为它是一个打印也 returns none):

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

执行第一行以创建您的 类,然后执行第 4 行: 由于某些原因,列表理解没有分配,所以:

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

myList                                                                                                                                                                                           

输出[44]:['False']

printingreturning[=40 不同=]。根据文档,exec always returns None:

[...] The return value is None.

使用 eval 之类的东西也不会帮助你,因为你的行计算结果也是 None (我重复:printing 不是与 returning)

相同

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


如果你想要的实际上是 return 而不是 print,那么相应地改变你的行:

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

然后,使用eval:

myValue = eval(line4)
# myValue = False