Skip to main content
 首页 » 编程设计

带有语句 : 'Syntax error: invalid syntax' 的 Python

2025年05月04日14hnrainll

我尝试了以下代码:

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 

我想更改 tensorflow 中的名称范围以共享变量。我查看了在线教程,但这并没有太大帮助。

请您参考如下方法:

略微过度简化,您的代码:

with x as 1: 
    y = 1 

... 翻译成这样:

try: 
    1 = x.__enter__() 
    y = 1 
finally: 
    1.__exit__() 

编写 1 = x.__enter__() 显然会引发一个 SyntaxError: can't assign to literal,因为分配 a 没有任何意义文字常量 1 的新值。

在 with 语句中做同样的事情会引发同样的异常。 (在旧版本的 Python 中(我认为只有 2.5?),错误消息不是很有用,它只是说 SyntaxError: invalid syntax,但问题是一样的。)


根据 x 中的内容,通过 SyntaxError 可能会引发一个新的异常,AttributeError: __enter__。只有context managers可用于 with statement .粗略地说,这些东西知道如何在它们自己之后清理,并且无论如何让它们在某个代码块的末尾清理是很重要的。文件是典型的例子:当你退出这个 block 时,它们会调用 self.close(),这确保你不会因为有数百个打开的文件而出现操作系统错误,或者无法刷新最后write,或者其他类似的问题。

有关 with 的更多信息,请参阅 PEP 343 ,最初将 with 添加到 Python 2.5 的提案,或 Understanding Python's "with" statement (from effbot) .


那么,这里的问题是:你想做什么?如果您只想将值 1 赋给名称 x,您已经知道该怎么做,因为您在紧接着的下一行:只是 x = 1。如果您正在尝试做一些不同的事情……好吧,可能有一种方法可以做到,但是 with 可能远不是正确的答案。