正如问题所问,为什么下面的代码不起作用:
while True:
exec("break")
我通过 python 3.5.2 控制台在 pycharm 中执行上述内容。
我最初认为这是一个上下文问题,但在阅读文档后,我还没有进一步理解为什么会出现此错误。
SyntaxError: 'break' outside loop
提前致谢 :)
EDIT:顺便说一句,我知道它可以在没有 exec() 的情况下工作,我很好奇为什么它不能与 exec 一起工作(因为我的情况需要它) - 欢迎全面的答案。
这是因为exec()
对周围的 while 循环一无所知。所以唯一的声明是exec()
在你的例子中看到的是break
。而不是使用exec("break")
,只需使用break
as is.
唯一访问的是exec()
函数具有其周围范围,是globals()
and locals()
字典。的文档exec()提供了一些关于如何exec()
works:
该函数支持Python代码的动态执行。对象必须是字符串或代码对象。如果它是一个字符串,则该字符串将被解析为一组 Python 语句,然后执行该语句(除非发生语法错误)。 [1] 如果它是一个代码对象,则简单地执行它。在所有情况下,执行的代码都应作为文件输入有效(请参阅参考手册中的“文件输入”部分)。请注意,即使在传递给 exec() 函数的代码上下文中,也不能在函数定义之外使用 return 和yield 语句。返回值为无。
在所有情况下,如果省略可选部分,则代码将在当前范围内执行。如果仅提供全局变量,则它必须是字典,它将用于全局变量和局部变量。如果给出了全局变量和局部变量,则它们分别用于全局变量和局部变量。如果提供的话,局部变量可以是任何映射对象。请记住,在模块级别,全局变量和局部变量是相同的字典。如果 exec 获取两个单独的对象作为全局对象和局部对象,则代码将像嵌入在类定义中一样执行。
如果全局字典不包含该键的值builtins,对内置模块内置字典的引用将插入到该键下。这样您就可以通过插入自己的代码来控制哪些内置函数可用于执行的代码builtins在将字典传递给 exec() 之前将其放入全局变量中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)