Pymongoジェネレーターが失敗する - ジェネレーター内の引数で「戻る」

StackOverflow https://stackoverflow.com/questions/8303483

  •  25-10-2019
  •  | 
  •  

質問

私は次のことをしようとしています:

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があなたが混ぜることを許可していないことです returnyield - 内部で両方を使用します get_collection_iterator.

明確化(ロブ・メイオフに感謝): return xyield 混ぜることはできませんが、裸です 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 

必要に応じて、これに対しても特別な例外を作成できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top