TypeError:“data”是此函数的无效关键字参数

2024-04-20 04:32:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图修改函数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)) 

Tags: 函数selfidjsonurldata参数request
2条回答

您可以向函数data添加一个额外的参数data。通过将默认值设置为None,您不必每次都提供它,但仍可以在需要时使用它。在

def request(self, method, endpoint, data=None, **kwargs):
    ...
    response = requests.request(method, url, data=data, **kwargs)

我找到了解决办法。我必须指定要传递给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

和13;
和13;

相关问题 更多 >