Python 循环数据:cmp中超过最大递归深度
我正在使用Django,它使用get\u或\u create遍历项目,查看它们是否存在。现在我有这个问题Python 循环数据:cmp中超过最大递归深度,python,django,Python,Django,我正在使用Django,它使用get\u或\u create遍历项目,查看它们是否存在。现在我有这个问题 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: ma
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"
我以前在Play Framework中做过这件事,也许因为我对Python还没有经验,所以我对它的看法是错误的,当它给我带来这种类型的错误时,我不知道如何继续。我试着改变一下结构,但没有效果。奇怪的是,如果我在game\u name
中使用string
,它将按预期工作,但如果我使用从循环中收集的数据,它将开始抛出该错误
最后,我想知道如何纠正这类错误,并希望进一步了解它为什么会这样做。好的,在探究和调查它为什么会这样做之后。我注意到对象的
type
不是真正的string
类型,或者在本例中是str
。我使用BeautifulSoup从一些XML文件中获取数据,当我使用bs4.find().string
时,它给了我一个navigablesting
,而不是一个普通的字符串
因此,为便于将来参考,请确保
类型是正确的。将NavigableString
馈送给Django筛选器时出现了此意外错误insert\u titles
函数是否发布了整个函数?你确定你根本没有操纵v
变量创建一个循环引用,就像这个问题中的:@DanHoerst Trace是你请求的,没有,我真的没有操纵任何东西。如果我用get\u或\u create
删除该行,一切正常。因此,我假设这个特定的循环有问题,使得django.db变得“疯狂”。这是只在从cron作业执行时发生,还是在shell中发生?比如,如果你启动django shell并执行一个游戏.objects.get\u或\u create(Game\u name='somename')
,你会得到什么?@MikeFogel一切都很好,我幸运地修复了它。贴出错误的答案,希望其他人注意到这种行为并避免。