Sig*_*ide 6 python exec while-loop
正如问题所问,为什么以下代码不起作用:
while True:
exec("break")
Run Code Online (Sandbox Code Playgroud)
我通过python 3.5.2控制台在pycharm中执行上面的操作.我最初认为这是一个上下文问题,但在阅读文档之后,我还没有接近理解为什么会发生这种错误.
SyntaxError: 'break' outside loop
Run Code Online (Sandbox Code Playgroud)
提前致谢 :)
编辑:我知道它的工作没有exec()顺便说一句,我很好奇为什么它不能与exec一起工作(因为我的情况需要它) - 全面的答案欢迎.
这是因为exec()对周围的 while 循环一无所知。exec()因此,在您的示例中看到的唯一语句是break. 不使用exec("break"),只需使用break原样使用即可。
exec()该函数对其周围范围的唯一访问是globals()和locals()字典。的文档exec()提供了一些关于如何exec()工作原理的见解:
\n\n该函数支持Python代码的动态执行。对象必须是字符串或代码对象。如果它是一个字符串,则该字符串将被解析为一组 Python 语句,然后执行该语句(除非发生语法错误)。[1] 如果它是一个代码对象,则简单地执行它。在所有情况下,\xe2\x80\x99s 执行的代码都应作为文件输入有效(请参阅参考手册中的 \xe2\x80\x9c 文件输入\xe2\x80\x9d 部分)。请注意,即使在传递给 exec() 函数的代码上下文中,也不能在函数定义之外使用 return 和yield 语句。返回值为无。
\n在所有情况下,如果省略可选部分,则代码将在当前范围内执行。如果仅提供全局变量,则它必须是字典,它将用于全局变量和局部变量。如果给出了全局变量和局部变量,则它们分别用于全局变量和局部变量。如果提供的话,局部变量可以是任何映射对象。请记住,在模块级别,全局变量和局部变量是相同的字典。如果 exec 获取两个单独的对象作为全局对象和局部对象,则代码将像嵌入在类定义中一样执行。
\n如果全局字典不包含键builtins的值,则对内置模块builtins的字典的引用将插入到该键下。这样,您可以通过在将自己的内置字典传递给 exec() 之前将其插入到全局变量中来控制所执行的代码可以使用哪些内置函数。
\n
| 归档时间: |
|
| 查看次数: |
637 次 |
| 最近记录: |