我正在尝试修改函数request
以根据api调用采用不同的参数。例如:在post_categories
中,我需要它发送包含要发布的正文的第三个参数data
,但是get_categories
函数不需要第三个参数。我在请求函数中添加了**kwargs
,但这是我得到的错误:TypeError: 'data' is an invalid keyword argument for this function
class ApiGateway():
base_url = 'https://api.com/v3/'
def request(self, method, endpoint, **kwargs):
url = f'{self.base_url}{endpoint}'
kwargs.setdefault('headers', {})
kwargs['headers'].update({
'Authorization': f'Bearer ${self.token}',
'Accept': 'application/json',
})
response = requests.request(method, url, **kwargs)
return response.json()
def get_categories(self, merchant_id):
endpoint = f'merchants/{merchant_id}/categories'
return self.request('GET', endpoint)
def post_categories(self, merchant_id):
update = {
'payment_method': {
'token': 1234,
'data': '123556'
}
}
endpoint = f'merchants/{merchant_id}/categories'
return self.request('POST', endpoint, data=json.dumps(update))
答案 0 :(得分:1)
我找到了解决方案。我必须指定要传递给request
函数的数据类型,而不是将数据作为kwargs参数传递。我刚刚更新了post_categories
函数return self.request('POST', endpoint, data=json.dumps(update))
的这一部分,所以现在该函数看起来像这样
def post_categories(self, merchant_id):
update = {
'payment_method': {
'token': 1234,
'data': '123556'
}
}
endpoint = f'merchants/{merchant_id}/categories'
return self.request('POST', endpoint, json=update) # <-- updated third parameter
答案 1 :(得分:0)
您可以做的是向函数data
添加一个额外的参数request
。通过将默认值设置为None
,您不必每次都提供它,但是仍然可以在需要时使用它。
def request(self, method, endpoint, data=None, **kwargs):
...
response = requests.request(method, url, data=data, **kwargs)