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/
您只需下載並運行。
此外,歡迎任何編碼風格的建議
將有助於提供重現問題的[SSCCE](http://sscce.org)。 – bereal
我更喜歡PEP8風格。函數都是小寫字母,類都有最初的大寫字母。 – Keith
不要從'__str__'方法返回一個unicode對象。改爲從__unicode__'中返回。 – Keith