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']
printing 与 returning[=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
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']
printing 与 returning[=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