pymongo générateur échoue - « retour » avec l'argument générateur de l'intérieur

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

  •  25-10-2019
  •  | 
  •  

Question

Je suis en train de faire ce qui suit:

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 

et appelant comme:

def get_collection():
    criteria = {'unique_key': 0, '_id': 0}
    for document in Mongo.get_collection_iterator('contract', {}, criteria):
        print document 

et je vois l'erreur en disant:

File "/Users/Dev/Documents/work/dw/src/utilities/Mongo.py", line 96
    yield doc
SyntaxError: 'return' with argument inside generator 

Qu'est-ce que je fais ici incorrecte?

Était-ce utile?

La solution

Il semble que le problème est que Python ne vous permet pas de mélanger return et yield -. Vous utilisez à la fois dans les get_collection_iterator

Précision (merci à Rob Mayoff): return x et yield ne peut pas être mélangé, mais un return nu peut

Autres conseils

Votre problème est dans le None de l'événement doit être retourné, mais il est détecté comme une erreur de syntaxe depuis le retour briserait la boucle d'itération.

Les générateurs qui sont destinés à une utilisation yield aux valeurs de transfert intercellulaire dans les boucles ne peuvent pas utiliser le retour avec des valeurs d'argument, car cela déclencherait une erreur de StopIteration. Plutôt que de retourner None, vous pouvez soulever une exception et l'attraper dans le contexte d'appel.

http: //www.answermysearches .com / python-fixation-SyntaxError-retour-à-argument à l'intérieur de générateur / 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 

Vous pouvez faire une exception pour cela aussi le cas échéant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top