0

関数に任意の数の引数を渡そうとしていますが、エラーが発生し続け、どこが間違っているのかよくわかりません。**kwargs を使用しようとしたのはこれが初めてです。

具体的には、Facepy ライブラリを使用して Facebook の Graph API からデータを取得しようとしています。ドキュメント ( https://facepy.readthedocs.org/en/latest/usage/graph-api.html ) によると、getメソッドは「since」、「until」などのオプションのパラメーターを受け入れる必要があります。これらのパラメーターのいくつかを特定のクエリに渡す場合、これは **kwargs を使用するのに理想的な時期のようです。

まず、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

異なる引数で関数を呼び出す 2 つの例を次に示します。

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

ただし、これを実行しようとすると、次のエラーが発生します。

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)

私は何を間違っていますか?

4

1 に答える 1

0

を使用して解凍することにより、辞書をkwargsとして渡すことができます**

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

編集1:

kwargs は実際にはキーワード args として渡す必要があります。つまり、関数は次のように呼び出す必要があります。

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

ドキュメントPython Kwargsについては、こちらを参照してください

于 2013-11-06T23:45:55.680 に答える