Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带语句的Python:';语法错误:无效语法';_Python_With Statement - Fatal编程技术网

带语句的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
:just
x=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
:just
x=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。错误是因为这不是有效的语法