¿Cómo paso un número arbitrario de argumentos a una función en Python (Biblioteca de Facepy)?

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

Pregunta

Estoy tratando de pasar un número arbitrario de argumentos a una función, y sigo recibiendo errores, y no estoy seguro de dónde me estoy equivocando. Esta es la primera vez que intento usar ** kwargs.

Más específicamente, estoy tratando de usar la biblioteca Facepy para obtener datos de la API de gráficos de Facebook. Según la documentación (https://facepy.readthedocs.org/en/latest/usage/graph-api.html), la get El método debe aceptar parámetros opcionales como "Dado", "hasta", etc. Dado que solo quiero pasar algunos de estos parámetros en cualquier consulta dada, este parece un momento ideal para usar ** kwargs.

Primero creo una función que envuelve la biblioteca de 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

Aquí hay dos ejemplos en los que llamo a la función con diferentes argumentos:

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

Sin embargo, cuando intento ejecutar esto, recibo el siguiente error:

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é estoy haciendo mal?

¿Fue útil?

Solución

Puede pasar un diccionario como Kwargs desempacándolo usando **

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

Editar 1:

Kwargs debe aprobarse como palabra clave args, es decir, la función debe llamarse como

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

Ver aquí para los documentos Python Kwargs

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top