Ich versuche, eine willkürliche Anzahl von Argumenten an eine Funktion zu übergeben, und ich bekomme immer wieder Fehler und bin mir nicht ganz sicher, wo ich falsch lieg. Dies ist das erste Mal, dass ich versucht habe, ** Kwargs zu verwenden.
Insbesondere versuche ich, die Facepy -Bibliothek zu verwenden, um Daten von der Facebook -Graph -API zu erhalten. Nach der Dokumentation (https://facepy.readthedocs.org/en/latest/usage/graph-api.html), das get
Die Methode sollte optionale Parameter wie "seit", "bis" usw. akzeptieren, da ich nur einige dieser Parameter für eine bestimmte Abfrage übergeben möchte. Dies scheint ein idealer Zeitpunkt für die Verwendung von ** kwargs zu sein.
Zuerst erstelle ich eine Funktion, die die Facepy -Bibliothek umhüllt:
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
Hier sind zwei Beispiele, in denen ich die Funktion mit unterschiedlichen Argumenten aufrufe:
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']
Wenn ich jedoch versuche, dies auszuführen, erhalte ich den folgenden Fehler:
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)
Was mache ich falsch?