pickle.dump meet 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/

Вы можете просто загрузить и запустить.

Кроме того, приветствуем любые предложения стиля кодирования

    Ну … я, наконец, решил проблему самостоятельно …

    Причиной этой проблемы является то, что рассол не может обрабатывать BEAUTIFULSOUP !!! Как правило, он не может обрабатывать парсер html.

    Я понимаю, что при передаче аргументов в мои функции я должен преобразовывать их в str () или unicode (), а затем выполнять назначения, вместо того, чтобы оставаться в них как объекты beautifulsoup …

    спасибо всем ~