这是来自Wes Mckinney的Python for Data Analysis的第204页
genre_iter = (set(x.split('|')) for x in movies.genres)
genres = sorted(set.union(*genre_iter))
在IPython中使用%paste方法时,此代码非常有效.在Python shell中运行时,代码也可以正常运行.但是,当我直接在IPython中键入第二行时,没有%paste方法
genres = sorted(set.union(*genre_iter))
我收到以下错误
TypeError: descriptor 'union' of 'set' object needs an argument
这似乎是一个bug,除非有一个我仍然没有意识到的IPython功能.
解决方法:
你已经耗尽了发电机.在再次使用之前重新定义它:
genre_iter = (set(x.split('|')) for x in movies.genres)
genres = sorted(set.union(*genre_iter))
在python中,一旦循环遍历迭代器的所有元素,就不能再次遍历迭代器(它现在是空的).
因为genre_iter迭代器是空的,所以你没有向set.union()传递任何参数,因此它会抱怨:
>>> set.union()
Traceback (most recent call last):
File "", line 1, in
TypeError: descriptor 'union' of 'set' object needs an argument
只是为了明确:你没有在ipython中找到错误.您可以在常规python提示中重现相同的问题.
标签:python,ipython,generator
来源: https://codeday.me/bug/20190725/1535724.html