首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python with语句:‘语法错误:无效语法’

Python with语句:‘语法错误:无效语法’
EN

Stack Overflow用户
提问于 2018-06-27 07:57:43
回答 1查看 1.7K关注 0票数 1

我尝试了以下代码:

代码语言:javascript
复制
with x as 1:
    y = 1
with z as 1:
    w = 1

编译器报告了SyntaxError:无效语法。有什么问题吗?

编辑:我想要做的是:

代码语言:javascript
复制
import tensorflow as tf
with tf.variable_scope("model"):
    y = 1
with tf.variable_scope("model2"):
    z = 1

我想要更改tensorflow中用于共享变量的名称范围。我看了在线教程,但帮助不大。

EN

回答 1

Stack Overflow用户

发布于 2018-06-27 08:14:42

稍微简化一下,你的代码:

代码语言:javascript
复制
with x as 1:
    y = 1

…翻译成如下所示:

代码语言:javascript
复制
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可能离正确的答案还差得远。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51052807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档