1: print(">1") if customC-6ren">
gpt4 book ai didi

Python exec() 问题

转载 作者:太空宇宙 更新时间:2023-11-04 08:05:51 26 4
gpt4 key购买 nike

我有这段代码:

def test(variable, customCode = ""):

if variable > 1:
print(">1")

if customCode != "":
exec(customCode)

if foo == 1:
print("Success")

numb = 12
code = "if variable > 1: foo = 1"

test(numb, code)

执行时会报错:

Error 1

所以,然后,我在代码的开头添加了 foo = 0,并得到了这个输出:

Issue 2

现在,很明显,它也应该输出Success,但事实并非如此。

有什么问题?

使用 Python 3。

最佳答案

正确的方法是在 python 3 中将一个字典传递给 exec 并按键查找,在 python2 中你的代码将按原样工作,因为 exec 是一个语句而不是 python3 中的一个函数:

def test(variable, customCode = ""):
d = {"variable":variable}
if customCode != "":
exec(customCode, d)
if d["foo"] == 1:
print("Success")

numb = 12
code = "if variable > 1: foo = 1"

test(numb, code)

输出:

In [13]: numb = 12

In [14]: code = "if variable > 1: foo = 1"

In [15]: test(numb, code)
Success

exec

Note The default locals act as described for function locals() below: modifications to the default locals dictionary should not be attempted. Pass an explicit locals dictionary if you need to see effects of the code on locals after function exec() returns.

您还需要注意您的 if variable > 1 为 False 的情况,因为您永远不会执行代码,因此永远不会添加 foo。

关于Python exec() 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31372252/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com