2013-01-22 40 views
0

我使用Django遍歷項目以查看它們是否使用get_or_create存在。現在,我有這個問題循環數據:cmp中超出最大遞歸深度

def insert_titles(self): 
    game = None 
    title = None 
    for k,v in self.data.items(): 


     game_exists = Game.objects.all().get_or_create(game_name=v['title']) #will get RuntimeError: maximum recursion depth exceeded in cmp 
     print game_exists 

基本上,這是將運行cron作業的劇本,讓我有種要通過一堆物品的迭代去的時候,我想

  while True: 
      try: 

       data = strategy.process() 
       filter = FilterGames(data, link) 

過濾遊戲代碼:

def __init__(self, data): 
    self.data = data 
    self.insert_titles() 
    print "init" 

我在玩框架過去做到了這一點,也許因爲我還沒有成長起來的Python,我看着它走錯了路,不知道如何當它給我時繼續他的錯誤類型。我試圖改變結構有點無濟於事。奇怪的是,如果我在game_name中使用string,它將按預期工作,但如果我使用從循環收集的數據,它會開始拋出該錯誤。

最後,我想知道如何糾正這種類型的錯誤,並希望更多地瞭解它爲什麼會這樣做。

+0

'insert_titles'函數是否發佈了整個函數?你確定你沒有操作'v'變量創建一個循環引用,就像這個問題一樣:http://stackoverflow.com/questions/14246081/runtimeerror-maximum-recursion-depth-exceeded-in-cmp-什麼時候用清單工作 –

+0

@DanHoerst跟蹤你請求的http://pastebin.com/pC5q7FBJ,沒有我真的沒有操縱任何東西。如果我用'get_or_create'移除那行,一切正常。所以我假設有一個特定的循環,使django.db得到「堅果」 – allenskd

+0

有問題嗎?只有當從cron作業執行或它會發生在shell嗎?就像,如果你啓動django shell並執行'Game.objects.get_or_create(game_name ='somename')',你會得到什麼? –

回答

1

好的,所以在撬動並調查它爲什麼這樣做後。我注意到對象的type不是真正的string類型,或者在這種情況下爲str。我使用BeautifulSoup從一些XML文件中獲取數據,當我使用bs4.find().string時,它給了我一個NavigableString而不是普通的字符串。

因此,爲了將來的參考,請確保type是正確的。喂NavigableString到Django過濾器給了我這個意想不到的錯誤

相關問題