2014-03-25 42 views
4

我注意到它可能是由美丽的或递归的数据结构引起的。然而,导致错误的数据结构,似乎没有什么问题:pickle.dump符合RuntimeError:在cmp中超出最大递归深度

class Movie: 
def __init__(self, name="", dscore=0, mscore=0, durl="", murl=""): 
    self.name = name 
    self.dscore = float(dscore) 
    self.mscore = float(mscore) 
    self.durl = durl 
    self.murl = murl 
def __str__(self): 
    return unicode(self.name) + u'/' + unicode(self.dscore) + u'/' + unicode(self.mscore) \ 
     + u'/' + unicode(self.durl) + u'/' + unicode(self.murl) 

引起该问题的语句是:

DataDict['MovieInfo'] = MovieInfo 

pickle.dump(DataDict, f, True) 

下面是函数:

def SaveData(): 
global LinkUrlQueue 
global MovieSet 
global MovieInfo 
global LinkUrlSet 
global MovieUrlQueue 
DataDict = {} 
DataDict['LinkUrlSet'] = LinkUrlSet 
DataDict['MovieSet'] = MovieSet 
#DataDict['MovieInfo'] = MovieInfo 
DataDict['LinkUrlQueue'] = LinkUrlQueue 
DataDict['MovieUrlQueue'] = MovieUrlQueue 
f = open('MovieInfo.txt', 'wb') 

for item in MovieInfo: 
    f.write(item.__str__().encode('utf8') + '\n'.encode('utf8')) 
f.close() 
try: 
    print 'saving data...' 
    f = open('spider.dat', 'wb') 
    pickle.dump(DataDict, f, True) 
    f.close() 
except IOError as e: 
    print 'IOError, error no: %d' % e.no 
    print 'saved to spider2.dat' 
    pickle.dump(DataDict, open('spider2.dat', 'wb')) 
    time.sleep(10) 

我的完整版乌尔斯河代码:

spider.py:http://paste.ubuntu.com/7149731/

fetch.py​​:http://paste.ubuntu.com/7149732/

您只需下载并运行。

此外,欢迎任何编码风格的建议

+0

将有助于提供重现问题的[SSCCE](http://sscce.org)。 – bereal

+0

我更喜欢PEP8风格。函数都是小写字母,类都有最初的大写字母。 – Keith

+0

不要从'__str__'方法返回一个unicode对象。改为从__unicode__'中返回。 – Keith

回答

7

嗯...我终于通过自己解决问题...

这样做的原因的问题是,咸菜不能处理BEAUTIFULSOUP!一般来说,它不能处理html解析器。

我意识到参数传递到我的函数时,我应该将它们转换为STR()或Unicode()然后做任务,而不是保持它们作为beautifulsoup对象...

感谢大家〜

相关问题