请教,如何解决 yield from 报错

2017 年 8 月 8 日
 louzhumuyou

遇到一个问题,我再看书的过程中,看到 yield from 语法,想尝试一下,然后就输入了书上的例子,然后编译器提示 yield from 语法报错了:

from collections import Iterable

def flatten(items, ignore_types=(str, bytes)):
    for x in items:
        if isinstance(x, Iterable) and not isinstance(x, ignore_types):
            yield from flatten(x)
        else:
            yield x

报错提示是 yield 语法有问题:

yield from flatten(x)
       ^
SyntaxError: invalid syntax

经过一番 google,有人提出升级 setuptools 能解决,可是我执行了 pip install --upgrade setuptools pip 升级之后,依然有这样的报错提示。我的环境是 mac,pyhon 2.7,这里的问题该如何解决呢?

4810 次点击
所在节点    Python
17 条回复
rocksolid
2017 年 8 月 8 日
3 的语法放在 pyhon 2.7 里用了
Lycnir
2017 年 8 月 8 日
请看 python3
louzhumuyou
2017 年 8 月 8 日
@rocksolid 能在 2 里面调用 python3 的语法吗?我记得原来好像看到过。不知道有没有记错。
rocksolid
2017 年 8 月 8 日
@louzhumuyou
from __future__ import xxxxxxx
louzhumuyou
2017 年 8 月 8 日
@Lycnir 如果我想在 python 2.7 里面用,该怎么办呢?
sujin190
2017 年 8 月 8 日
@louzhumuyou #5 这种语法 2.7 肯定用不了啊,否则 3 和 2.7 的兼容问题不是被你解决了
laike9m
2017 年 8 月 8 日
yield from 是没法在 2 里用的
ylcc
2017 年 8 月 8 日
看到标题我就感觉是在 2 里面跑了,果然。。。
leavic
2017 年 8 月 8 日
@louzhumuyou 自己把 python2 的源码拿来修改,自己实现 yield from 语法,然后用自己的 python2,除此,无他。
dsg001
2017 年 8 月 8 日
移植到 py2,只能用 for 了
ipwx
2017 年 8 月 8 日
Python 2 不支持 yield from。

其实我觉得是时候投向 Python 3 了,除非你有老项目的历史包袱。

P.S. yield from xx 等价于

for x in xx: yield x
dreamapple
2017 年 8 月 8 日
书都是 python3 的书,还用 python2 的解释器
louzhumuyou
2017 年 8 月 8 日
@dreamapple 书上没写,没指明,一直用的 python 2.7,之前写的很多项目都是 2.7 的。在考虑中迁移。
louzhumuyou
2017 年 8 月 8 日
@ipwx 谢谢,在考虑迁移。
badttt
2017 年 8 月 8 日
python2.x 和 python3 是两种语言
SoulMelody
2017 年 8 月 9 日
860670496
2017 年 8 月 11 日
早日投奔 py3,不受苦
前一阵为了给新服务器同时兼容 2 和 3 费了半天劲

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/381225

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX