2013-01-22 3 views
0

get_or_create를 사용하여 항목이 반복되는지 확인하기 위해 Django를 사용하고 있습니다. 지금 나는이 문제를 기본적으로 루핑 데이터 : 최대 재귀 깊이가 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" 

나는 아직 방법, 확실하지 내가 그것을 잘못된 방법을 찾고 있어요 파이썬 경험이있어 아마 때문에, 플레이 프레임 워크와 과거에 이런 짓을했습니다 그것이 나에게 줄 때 진행한다. 그의 오류 유형. 구조 변경을 조금이라도 시도해 보았습니다. 이상한 점은 game_name에서 string을 사용하면 예상대로 작동하지만 루프에서 수집 한 데이터를 사용하면 오류가 발생하기 시작한다는 것입니다.

마지막으로, 나는이 유형의 오류를 수정하는 방법을 알고 싶습니다. 그리고 왜 그렇게하는지 더 잘 이해하고 싶습니다.

+0

'insert_titles' 함수가 전체 함수에 게시 되었습니까? 이 질문과 같이 순환 참조를 생성 할 때'v' 변수를 조작하지 않으시겠습니까? http://stackoverflow.com/questions/14246081/runtimeerror-maximum-recursion-depth-exceeded-in-cmp- when-working-with-lists –

+0

@DanHoerst Trace 당신이 http://pastebin.com/pC5q7FBJ를 요청했는데 아무 것도 전혀 조작하지 않았습니다. 'get_or_create'로 그 줄을 지우면 모든 것이 잘 동작합니다. 그래서 거기에 django.db "견과류"있어 특정 루프가 잘못된 가정합니다 – allenskd

+0

이 경우에만 cron 작업에서 실행될 때 발생하거나 셸에서 발생합니까? 마찬가지로, 당신이 장고 껍데기를 부팅하고'Game.objects.get_or_create (game_name = 'somename')'을하면, 당신은 무엇을 얻습니까? –

답변

1

좋아요, 그럼 왜 그 일을했는지 ​​조사하고 조사한 후. 개체의 type이 실제로 string 유형이 아니거나이 경우 str이 아닌 것으로 나타났습니다. BeautifulSoup을 사용하여 일부 XML 파일에서 데이터를 가져오고 bs4.find().string을 사용하면 일반 문자열 대신 NavigableString이 표시됩니다.

나중에 참조 할 수 있도록 type이 올바른지 확인하십시오. NavigableString을 Django 필터에 넘겨 주면이 예상치 못한 오류가 발생했습니다

관련 문제