我正在尝试执行以下操作:
def get_collection_iterator(collection_name, find={}, criteria=None):
collection = db[collection_name]
# prepare the list of values of collection
if collection is None:
logging.error('Mongo could not return the collecton - ' + collection_name)
return None
collection = collection.find(find, criteria)
for doc in collection:
yield doc
并呼叫:
def get_collection():
criteria = {'unique_key': 0, '_id': 0}
for document in Mongo.get_collection_iterator('contract', {}, criteria):
print document
我看到错误说:
File "/Users/Dev/Documents/work/dw/src/utilities/Mongo.py", line 96
yield doc
SyntaxError: 'return' with argument inside generator
我在这里做错了什么?
答案 0 :(得分:12)
似乎问题是Python不允许你混合使用return
和yield
- 你在get_collection_iterator
内同时使用。
澄清(感谢rob mayoff):return x
和yield
无法混合,但只有return
可以
答案 1 :(得分:3)
您的问题是在必须返回None
的情况下,但它被检测为语法错误,因为返回会破坏迭代循环。
旨在使用yield
来切换循环中的值的生成器不能使用带参数值的return,因为这会触发StopIteration
错误。
http://www.answermysearches.com/python-fixing-syntaxerror-return-with-argument-inside-generator/354/
def get_collection_iterator(collection_name, find={}, criteria=None):
collection = db[collection_name]
# prepare the list of values of collection
if collection is None:
err_msg = 'Mongo could not return the collecton - ' + collection_name
logging.error(err_msg)
raise Exception(err_msg)
collection = collection.find(find, criteria)
for doc in collection:
yield doc
如果需要,你也可以为此做一个特殊的例外。