繁体   English   中英

带有语句的Python:“语法错误:语法无效”

[英]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 ,但问题是相同的。)


根据xAttributeError: __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:

创建具有三个特征的上下文(执行环境):

  1. 输入上下文后,将调用对象的__enter__方法(函数);
  2. 该函数的返回值分配给name ;
  3. 离开上下文时, 无论我们如何离开上下文都将调用对象的__exit__方法。

with x as 1尝试在所有特征上均失败。 x没有__enter____exit__方法; 没有返回值; 您不能将该返回值分配给常数1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM