【问题标题】:Python 2.6 Generator expression must be parenthesized if not sole argument如果不是唯一参数,Python 2.6 生成器表达式必须用括号括起来
【发布时间】:2018-06-19 19:25:52
【问题描述】:

我为 Python 2.6 重写了以下 Python 2.7+ 代码,如下所示。

Python 2.7+

options = {key: value for key, value in options.items() if value is not None}

Python 2.6

options = dict((key, value) for key, value in options.items() if value is not None)

但我收到以下错误

SyntaxError: Generator expression must be parenthesized if not sole argument

我做错了什么?

【问题讨论】:

  • 我相信这应该有效。当您实际尝试运行此代码时,您确定您将所有内容都按照您向我们展示的方式进行了括号吗? (另外,不要对 Python 使用 Javascript/HTML/CSS sn-p 按钮。另外,嗯,Python 2.6?)
  • 无法在 2.6.9 上重现。
  • 我完全复制了代码。我在 Python 2.6.6 上。
  • 无法在 2.6.6 甚至 2.5.6 中重现。
  • 是 python2.6 ;当您仍在使用 RHEL6 服务器时,这就是您所使用的。 AFAIS 它应该工作。您是否尝试将其转换为列表?字典([...])

标签: python python-2.6


【解决方案1】:

我在 3.8 中的“代码大战”kata 中查找“SyntaxError: Generator expression must be parenthesized”时发现了这个问题。

我大概类似的例子是:

max(word for word in x.split(), key=score)

我正在寻找给定字符串x 中的单词,该单词是由名为score 的现有但(至少在此处)不相关的方法计算得出的最高分数。在将我的代码缩减为该语句后,我发现word for word in x.split() 中的问题没有与第二个参数分开括在括号中。改变这让我的代码运行得很好:

max((word for word in x.split()), key=score)

由于您的示例没有额外的参数,但keyvalue 之间有一个逗号,我假设解析器在遇到逗号和生成器表达式时会出现问题。避免打开包装并因此删除逗号应该可以解决问题:

options = dict(item for item in options.items() if item[1] is not None)

我们只需要从元组中获取值,而不是使用单独的变量。

【讨论】:

    猜你喜欢
    • 2018-12-18
    • 2018-07-27
    • 1970-01-01
    • 2019-02-13
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    相关资源
    最近更新 更多