Como faço para passar um número arbitrário de argumentos para uma função no Python (Facepy Library)?

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

Pergunta

Estou tentando passar um número arbitrário de argumentos para uma função e continuo recebendo erros, e não tenho certeza de onde estou errado. É a primeira vez que tentei usar ** kwargs.

Mais especificamente, estou tentando usar a biblioteca FACEPY para obter dados da API do gráfico do Facebook. De acordo com a documentação (https://facepy.readthedocs.org/en/latest/usage/graph-api.html), a get O método deve aceitar parâmetros opcionais como "desde", "até", etc. Como eu só quero passar alguns desses parâmetros em qualquer consulta, esse parece ser o momento ideal para usar ** kwargs.

Primeiro, crio uma função que envolve a biblioteca 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

Aqui estão dois exemplos em que eu chamo a função com argumentos diferentes:

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

No entanto, quando tento executar isso, recebo o seguinte erro:

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)

O que estou fazendo errado?

Foi útil?

Solução

Você pode passar um dicionário como kwargs, descompactando -o usando **

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

Editar 1:

Kwargs deve realmente ser passado como palavra -chave args, ou seja, a função deve ser chamada como

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

Veja aqui para os documentos Python Kwargs

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top