[英]Python with statement: 'Syntax error: invalid syntax'
我尝试了以下代码:
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
我想在张量流中更改名称范围以共享变量。 我看了在线教程,但这并没有太大帮助。
稍微简化一下,您的代码:
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
, AttributeError: __enter__
SyntaxError
可能会引发一个新异常AttributeError: __enter__
。 with
语句中只能使用上下文管理器 。 粗略地讲,这些都是知道自己如何清理的东西,无论如何,在某些代码块的末尾清理它们的重要位置。 文件是典型的示例:退出块时它们调用self.close()
,以确保不会因self.close()
成百上千个打开的文件而不会出现操作系统错误,或者不会刷新上一次write
或其他此类问题。
有关with
更多信息,请参阅PEP 343 (最初with
Python 2.5 with
添加的提案)或了解Python的“ with”语句(来自effbot) 。
所以,这里的问题是:您想做什么? 如果只想将值1
分配给名称x
,那么您已经知道该怎么做,因为您在下一行使用y
进行了处理:仅x = 1
。 如果你试图做一些不同......嗯,有可能是一个办法做到这一点,但with
可能是无处正确的答案附近。
您误解了Python的with语句 。 如果您告诉我们您想做什么,我们可以为您提供帮助。
with context_obj as name:
创建具有三个特征的上下文(执行环境):
__enter__
方法(函数); name
; __exit__
方法。 您with x as 1
尝试在所有特征上均失败。 x
没有__enter__
或__exit__
方法; 没有返回值; 您不能将该返回值分配给常数1
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.