Python 2.6 生成器表达式必须括起来,如果不是唯一的参数



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

蟒蛇 2.7+

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

蟒蛇 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

我做错了什么?

我在 3.8 中做的"代码战争"kata 中查找"语法错误:生成器表达式必须括起来"时发现了这个问题。

我大概类似的例子是:

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)

由于您的示例没有其他参数,但是keydanvalue之间有一个逗号,因此我假设在面对逗号和生成器表达式时,解析器中存在打嗝。避免打开物品包装,从而删除逗号应该可以解决问题:

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

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

相关内容

最新更新