带语句的Python:';语法错误:无效语法';
我尝试了以下代码:带语句的Python:';语法错误:无效语法';,python,with-statement,Python,With Statement,我尝试了以下代码: with x as 1: y = 1 with z as 1: w = 1 编译器报告了一个语法错误:无效语法。有什么问题 [编辑:]我想做的是: import tensorflow as tf with tf.variable_scope("model"): y = 1 with tf.variable_scope("model2"): z = 1 我想更改tensorflow中用于共享变量的名称范围。我看了在线教程,但没有多大帮助。稍微
with x as 1:
y = 1
with z as 1:
w = 1
编译器报告了一个语法错误:无效语法。有什么问题
[编辑:]我想做的是:
import tensorflow as tf
with tf.variable_scope("model"):
y = 1
with tf.variable_scope("model2"):
z = 1
我想更改tensorflow中用于共享变量的名称范围。我看了在线教程,但没有多大帮助。稍微简化一下,您的代码:
with x as 1:
y = 1
…可以翻译成这样:
try:
1 = x.__enter__()
y = 1
finally:
1.__exit__()
写入1=x.\uuuu enter\uuuu()
显然会引发一个语法错误:无法分配给literal
,因为它并不意味着为literal常量1
分配一个新值
在with
语句中执行相同的操作会引发相同的异常。(在Python的旧版本中(我认为只有2.5?),错误消息没有那么有用,它只是说SyntaxError:invalid syntax
,但问题是相同的。)
根据
x
中的内容,通过SyntaxError
可能只会引发一个新的异常,AttributeError:\uuuuuu enter\uuuu
。只能在一个特定的环境中使用。大致上,这些东西知道如何在它们自己之后进行清理,并且无论发生什么情况,让它们在某个代码块的末尾进行清理都很重要。文件就是一个典型的例子:当您退出块时,它们调用self.close()
,这样可以确保您不会因为周围有数百个打开的文件而出现操作系统错误,或者无法刷新最后一个写入
,或者其他类似问题
有关with
的更多信息,请参阅最初将with
添加到Python 2.5的提案,或
所以,这里的问题是:你想做什么?如果您只想将值
1
分配给名称x
,那么您已经知道如何执行此操作,因为您在下一行中使用了y
:justx=1
。如果您试图做一些不同的事情……嗯,可能有一种方法可以做到,但是使用可能远远不是正确的答案。稍微简化一下,您的代码:
with x as 1:
y = 1
…可以翻译成这样:
try:
1 = x.__enter__()
y = 1
finally:
1.__exit__()
写入1=x.\uuuu enter\uuuu()
显然会引发一个语法错误:无法分配给literal
,因为它并不意味着为literal常量1
分配一个新值
在with
语句中执行相同的操作会引发相同的异常。(在Python的旧版本中(我认为只有2.5?),错误消息没有那么有用,它只是说SyntaxError:invalid syntax
,但问题是相同的。)
根据x
中的内容,通过SyntaxError
可能只会引发一个新的异常,AttributeError:\uuuuuu enter\uuuu
。只能在一个特定的环境中使用。大致上,这些东西知道如何在它们自己之后进行清理,并且无论发生什么情况,让它们在某个代码块的末尾进行清理都很重要。文件就是一个典型的例子:当您退出块时,它们调用self.close()
,这样可以确保您不会因为周围有数百个打开的文件而出现操作系统错误,或者无法刷新最后一个写入
,或者其他类似问题
有关with
的更多信息,请参阅最初将with
添加到Python 2.5的提案,或
所以,这里的问题是:你想做什么?如果您只想将值1
分配给名称x
,那么您已经知道如何执行此操作,因为您在下一行中使用了y
:justx=1
。如果您试图做一些不同的事情……那么,可能有一种方法可以做到这一点,但是使用
可能远远不是正确的答案。您误解了Python的方法。如果你告诉我们你想做什么,我们可以帮你
with context_obj as name:
创建具有三个特征的上下文(执行环境):
\uuuu enter\uuu
方法(函数)李>
name
李>
\uuuuu exit\uuuu
方法尝试将x作为1时,
在所有特征上都失败x
没有\uuuuuuuuuuuuuuuuuuuu
或\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu;没有返回值;您无法将该返回值赋给常量1
,因为您误解了Python的定义。如果你告诉我们你想做什么,我们可以帮你
with context_obj as name:
创建具有三个特征的上下文(执行环境):
在输入上下文时,调用对象的\uuuu enter\uuu
方法(函数)李>
该函数的返回值分配给name
李>
离开上下文时,不管我们如何离开上下文,都会调用对象的\uuuuu exit\uuuu
方法
尝试将x作为1时,在所有特征上都失败x
没有\uuuuuuuuuuuuuuuuuuuu
或\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu;没有返回值;您无法将该返回值分配给常量1
。错误是因为这是无效的语法后面的东西,因为必须是分配目标,并且您不能分配给1
之类的常量。这可能对您没有任何帮助。但你写的基本上都是胡说八道。如果你能解释你想让那行代码做什么,以及为什么你认为用x作为1的可以做到这一点:
,我们可能会解释正确的方法。顺便问一下,你使用的是什么版本的Python?Python2.7和3.5+确实提供了一个稍微丰富的语法错误:无法分配到literal
,我认为这在2.6和3.2左右就是正确的。我使用的是Python3.6.5。错误是因为这不是有效的语法