我为 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)
由于您的示例没有其他参数,但是key
danvalue
之间有一个逗号,因此我假设在面对逗号和生成器表达式时,解析器中存在打嗝。避免打开物品包装,从而删除逗号应该可以解决问题:
options = dict(item for item in options.items() if item[1] is not None)
我们只需要从元组中获取值,而不是使用单独的变量。