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

时间:2018-06-26 23:57:43

标签: python with-statement

我尝试了以下代码:

$(function() {
  var content = $('<div style="background-color: yellow">aaaaaa</div>');
  var dialog = $(content)
    .dialog({
      autoOpen: true,
      modal: true,
      width: 300,
      height: 300,
      title: "MyTitle",
      position: "center",
      overflow: "auto",
      resize: function(event, ui) {
        let width = ($(".ui-dialog-content")[0].scrollWidth - 33.3) + "px";
        console.log(width);
        $(".ui-dialog-content").css("width", width);
      }
    });
  dialog.dialog('open');
});

编译器报告了SyntaxError:无效的语法。有什么问题吗?

[编辑:]我正在尝试做的是:

with x as 1:
    y = 1
with z as 1:
    w = 1

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

2 个答案:

答案 0 :(得分:5)

您的代码略有简化:

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中的内容,越过SyntaxError可能会引发一个新的异常AttributeError: __enter__context managers中只能使用with statement。粗略地讲,这些都是知道自己如何清理的东西,无论如何,在某些代码块的末尾清理它们的重要位置。文件是典型的示例:退出块时它们会调用self.close(),以确保不会因放置数百个打开的文件而导致操作系统错误,也不会刷新最后一个write,或其他此类问题。

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


所以,这里的问题是:您想做什么?如果您只想将值1分配给名称x,那么您已经知道该怎么做,因为您是在下一行使用y来完成此操作的:仅{{1 }}。如果您尝试做一些不同的事情……好吧,也许有一种方法可以做到,但是x = 1可能距离正确答案还很遥远。

答案 1 :(得分:1)

您误解了Python的with statement。如果您告诉我们您想做什么,我们可以为您提供帮助。

{'first_name': 'Alyssa', 'favorite_number': 256, 'favorite_color': None}
{'first_name': 'Ben', 'favorite_number': 7, 'favorite_color': 'red'}

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

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

您的尝试__exit__在所有特征上均失败。 with x as 1没有x__enter__方法;没有返回值;您无法将该返回值分配给常量__exit__