首页 > 解决方案 > TypeError:“数据”是此函数的无效关键字参数

问题描述

我正在尝试修改函数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)) 

标签: pythonpython-requestskeyword-argument

解决方案


我找到了解决方案。我必须指定我想传递给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


推荐阅读