首页 > 解决方案 > Python with statement: '语法错误:无效语法'

问题描述

我尝试了以下代码:

with x as 1:
    y = 1
with z as 1:
    w = 1

编译器报告了 SyntaxError: invalid syntax。问题是什么?

[编辑:]我想做的是:

import tensorflow as tf
with tf.variable_scope("model"):
    y = 1
with tf.variable_scope("model2"):
    z = 1

我想更改 tensorflow 中的名称范围以共享变量。我查看了在线教程,但这并没有太大帮助。

标签: pythonwith-statement

解决方案


稍微过度简化,您的代码:

with x as 1:
    y = 1

......翻译成这样的东西:

try:
    1 = x.__enter__()
    y = 1
finally:
    1.__exit__()

写作1 = x.__enter__()显然会引发 a SyntaxError: can't assign to literal,因为给字面常量分配一个新值没有任何意义1

在语句中做同样的事情with会引发同样的异常。(在旧版本的 Python 中(我认为只有 2.5?),错误消息不是很有用,它只是说SyntaxError: invalid syntax,但问题是一样的。)


根据. x_ SyntaxError_ AttributeError: __enter__只有上下文管理器可以在with语句中使用。粗略地说,这些东西知道如何在自己之后进行清理,并且无论如何让它们在某个代码块的末尾进行清理是很重要的。文件就是典型的例子:self.close()当你退出块时它们会调用,这样可以确保你不会因为有数百个打开的文件而出现操作系统错误,或者无法刷新最后一个文件write,或者其他类似的问题。

有关 的更多信息with,请参阅PEP 343,最初添加with到 Python 2.5 的提案,或了解 Python 的“with”语句(来自 effbot)


所以,这里的问题是:你想做什么?如果您只想将值分配给1name x,您已经知道如何做到这一点,因为您y在下一行使用了它:just x = 1。如果您尝试做一些不同的事情……好吧,可能有办法做到这一点,但with可能离正确答案还很远。


推荐阅读