【发布时间】:2021-04-02 02:51:12
【问题描述】:
def build(s, loc):
exec(s, loc)
return loc
def main():
L = build('x = 1', locals())
locals().update(L)
exec('print(x)')
if __name__ == '__main__':
main()
当我运行上面的代码时,python 控制台会显示 '1'。
def build(s, loc):
exec(s, loc)
return loc
def main():
L = build('x = 1', locals())
locals().update(L)
print(x)
if __name__ == '__main__':
main()
当我运行上面的代码时,它会显示'name 'x' is not defined'。
它们有什么区别?
我修改了代码以减少歧义,但仍然存在类似问题。
def main():
exec('x = 1')
exec('print(x)')
if __name__ == '__main__':
main()
这将显示“1”。
def main():
exec('x = 1')
print(x)
if __name__ == '__main__':
main()
这会出错。
【问题讨论】:
-
修改
locals是未定义的行为。 -
感谢您的回答。我添加更多细节,类似的错误仍然存在。
-
用
exec修改局部变量也是未定义的行为。 -
我假设它可能是解释器不理解
exec('x = 1')实例化了一个新变量x,因此错误地假设您的第二个代码在执行前校对它时包含语法错误 - 而它应该可以正常运行,因此当通过exec调用调用 x 时,在您的第一个示例中通过语法检查就好了
标签: python printing syntax local-variables