Comment transmettre un nombre arbitraire d'arguments à une fonction dans Python (bibliothèque FACEPY)?

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

Question

J'essaie de passer un nombre arbitraire d'arguments à une fonction, et je continue d'obtenir des erreurs, et je ne sais pas trop où je vais mal. C'est la première fois que j'essaie d'utiliser ** kwargs.

Plus précisément, j'essaie d'utiliser la bibliothèque FACEPY pour obtenir des données de l'API Graph de Facebook. Selon la documentation (https://facepy.readthedocs.org/en/latest/usage/graph-api.html), la get La méthode doit accepter des paramètres facultatifs comme "puisque", "jusqu'à", etc. Comme je veux seulement passer certains de ces paramètres sur une requête donnée, cela semble être un moment idéal pour utiliser ** kwargs.

Je crée d'abord une fonction qui enveloppe la bibliothèque FACEPY:

def graph_retriever(object_id, metric_url, **kwargs): 
    #optional args that I want to pass include since, until, and summary
    graph = facepy.GraphAPI(access_token)
    retries = 3 # An integer describing how many times the request may be retried.
    object_data = graph.get('%s/%s' % (object_id, metric_url), False, retries, **kwargs)
    return object_data

Voici deux exemples où j'appelle la fonction avec des arguments différents:

for since, until in day_segmenter(start, end): # loop through the date range
    raw_post_data = graph_retriever(str(page), 'posts', {'since': since, 'until': until})

post_dict['comment_count'] = graph_retriever(post_id, 'comments', {'summary':1})['summary']['total_count']

Cependant, lorsque j'essaie d'exécuter ceci, j'obtiens l'erreur suivante:

Traceback (most recent call last): raw_post_data = graph_retriever(str(page), 'posts', {'since': since, 'until': until}) TypeError: graph_retriever() takes exactly 2 arguments (3 given)

Qu'est-ce que je fais mal?

Était-ce utile?

La solution

Vous pouvez passer un dictionnaire comme kwargs en le déballant en utilisant **

graph_retriever(str(page), 'posts', **{'since': since, 'until': until})

Modifier 1:

Les kwargs doivent en fait être transmis comme un mot clé.

graph_retriever(str(page), 'posts', since= since, until= until)

voir ici pour les documents Python kwargs

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