Domanda

Sto cercando di passare un numero arbitrario di argomenti a una funzione e continuo a ottenere errori e non sono sicuro di dove sbaglio. Questa è la prima volta che ho tentato di usare ** Kwargs.

Più specificamente, sto cercando di utilizzare la libreria facepy per ottenere dati dall'API grafico di Facebook. Secondo la documentazione (https://facepy.readthedocs.org/en/latest/usage/graph-api.html), il get Il metodo dovrebbe accettare parametri opzionali come "da quando", "fino a", ecc. Dato che voglio solo passare alcuni di questi parametri su una determinata query, questo sembra un momento ideale per usare ** Kwargs.

Per prima cosa creo una funzione che avvolge la libreria 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

Ecco due esempi in cui chiamo la funzione con argomenti diversi:

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']

Tuttavia, quando provo a eseguire questo, ricevo il seguente errore:

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)

Che cosa sto facendo di sbagliato?

È stato utile?

Soluzione

Puoi passare un dizionario come kwargs disimballarlo usando **

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

EDIT 1:

i kwarg devono effettivamente essere passati come parola chiave args, cioè la funzione dovrebbe essere chiamata come

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

Vedi qui per i documenti Python Kwargs

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top