我有flask-mongoengine应用程序,当我要遍历mongoengine queryset对象时遇到了seriuos问题。这是我的mongoengine对象的代码:
mongo_models:
class Candid(Document):
candid_intent_id = StringField()
id_list = ListField(StringField())
custom_code = StringField()
is_approved = BooleanField()
def to_json(self, *args, **kwargs):
return {'candid_intent_id': self.candid_intent_id,
'id_list': self.id_list,
'custom_code': self.custom_code,
'is_approved': self.is_approved}
我想这样遍历它们:
候选列表:
custom_code = 'Bob'
query_set = Candid.objects(is_denied=False, custom_code=current_request.custom_code)
try:
for candid in query_set:
suggested_intent_list.append(candid.to_json())
if not candid.is_approved:
suggested_intent_count += 1
except StopIteration:
return 'StopIteration error'
现在是问题所在:当使用本地mongo服务器运行我的代码(使用python 3.5.2)时,它工作正常(无论Candid集合是否为空),但是我将代码部署在了dockerized服务器上(使用python) 3.7.0)我收到以下运行时错误:
File "/controller.py", line 25, in <candid_list>
for candid in query_set:
RuntimeError: generator raised StopIteration
顺便说一句,mongoengine版本与本地和docker服务器运行相同:mongoengine == 0.15.0。
请告诉我是否需要提供更多信息,我们将为您提供任何帮助。
答案 0 :(得分:1)
问题是在python 3.5中不赞成在生成器中使用StopIteration
,在python 3.6中提出警告,而现在在python 3.7中提出错误。听起来该软件包尚未针对python 3.7做好准备。
答案 1 :(得分:1)
升级mongoengine解决了我的问题。需要修复此错误的地方,必须更新旧版本(或引起此问题的版本)。
pip install mongoengine --upgrade
答案 2 :(得分:0)
@FHTMitchell指出问题是我的本地计算机(3.5.2)和docker服务器(3.7.0)上的python版本之间存在差异。我将docker映像的python更改为python:3.5-slim,它解决了问题。希望它能帮助某人。 但最重要的是,我从中得到的教训是: 确保您的开发和部署环境匹配!