Pymongoジェネレーターが失敗する - ジェネレーター内の引数で「戻る」
質問
私は次のことをしようとしています:
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
ここで間違っていることは何ですか?
解決
問題は、Pythonがあなたが混ぜることを許可していないことです return
と yield
- 内部で両方を使用します get_collection_iterator
.
明確化(ロブ・メイオフに感謝): return x
と yield
混ぜることはできませんが、裸です return
できる
他のヒント
あなたの問題はイベントにあります None
返品する必要がありますが、戻りが反復ループを破壊するため、構文エラーとして検出されます。
使用することを目的としたジェネレーター yield
ループ内の値をハンドオフすることは、引数値で返品を使用できません。これにより、 StopIteration
エラー。戻るのではなく None
, 、例外を提起し、呼び出しのコンテキストでそれをキャッチすることをお勧めします。
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
必要に応じて、これに対しても特別な例外を作成できます。
所属していません StackOverflow