我尝试了以下代码:
with x as 1:
y = 1
with z as 1:
w = 1
编译器报告了SyntaxError:无效语法。有什么问题吗?
编辑:我想要做的是:
import tensorflow as tf
with tf.variable_scope("model"):
y = 1
with tf.variable_scope("model2"):
z = 1
我想要更改tensorflow中用于共享变量的名称范围。我看了在线教程,但帮助不大。
发布于 2018-06-27 08:14:42
稍微简化一下,你的代码:
with x as 1:
y = 1
…翻译成如下所示:
try:
1 = x.__enter__()
y = 1
finally:
1.__exit__()
编写1 = x.__enter__()
显然会引发一个SyntaxError: can't assign to literal
,因为给文字常量1
赋一个新值没有任何意义。
在with
语句中执行相同的操作会引发相同的异常。(在Python的旧版本中(我想只有2.5?),错误消息没有那么有用,它只显示SyntaxError: invalid syntax
,但问题是一样的。)
根据x
中的内容,通过SyntaxError
很可能只会引发一个新的异常AttributeError: __enter__
。with
statement中只能使用context managers。粗略地说,这些都是知道如何在自己之后清理的东西,以及在任何情况下让它们在某些代码块结束时进行清理的重要性。文件就是一个典型的例子:当您退出块时,它们会调用self.close()
,这样可以确保您不会因为有成百上千个打开的文件而出现操作系统错误,或者无法刷新最后一个write
,或者其他类似的问题。
有关with
的更多信息,请参阅PEP 343,这是最初将with
添加到Python2.5或Understanding Python's "with" statement (from effbot)的提案。
所以,这里的问题是:你想做什么?如果您只想将值1
赋值给名称x
,那么您已经知道如何做到这一点,因为您已经在下一行中使用y
完成了该操作:只需x = 1
。如果你想做一些不同的…好吧,也许有一种方法可以做到这一点,但with
可能离正确的答案还差得远。
https://stackoverflow.com/questions/51052807
复制相似问题