首页 > 解决方案 > 使用带有 urequests 的 **kwargs 的 Python '函数不接受关键字参数' 错误

问题描述

快速项目概述:我正在尝试使用 LoPy 为我的飞利浦 Hue 灯制作控制器。要从 Hue API 获取信息,我需要建立连接(有效)并将信息发送到 API,问题出在那部分。

由于 LoPy 不能使用 'requests' 库,我使用的是 'urequests' 库,用于发送请求的函数如下所示

请求.py

def head(url, **kwargs):
    return request("HEAD", url, **kwargs)

def get(url, **kwargs):
    return request("GET", url, **kwargs)

def post(url, **kwargs):
    return request("POST", url, **kwargs)

def put(url, **kwargs):
    return request("PUT", url, **kwargs)

def patch(url, **kwargs):
    return request("PATCH", url, **kwargs)

def delete(url, **kwargs):
    return request("DELETE", url, **kwargs)

使用这个库我正在使用“qhue”库来获取关于我的灯的信息,这可以使用以下函数:

qhue.py

def __call__(self, *args, **kwargs):
    url = self.url
    for a in args:
        url += "/" + str(a)
    http_method = kwargs.pop('http_method',
        'get' if not kwargs else 'put').lower()
    if http_method == 'put':
        r = requests.put(url, data=json.dumps(kwargs, default=list), timeout=self.timeout)
    elif http_method == 'post':
        r = requests.post(url, data=json.dumps(kwargs, default=list), timeout=self.timeout)
    elif http_method == 'delete':
        r = requests.delete(url, timeout=self.timeout)
    else:
        r = requests.get(url, timeout=self.timeout)
    if r.status_code != 200:
        raise QhueException("Received response {c} from {u}".format(c=r.status_code, u=url))
    resp = r.json()
    if type(resp) == list:
        errors = [m['error']['description'] for m in resp if 'error' in m]
        if errors:
            raise QhueException("\n".join(errors))
    return resp

因此,当我请求灯的信息时,在 qhue.py 中调用了“else”,因此在 urequests.py 中调用了 get() 函数,但由于某种原因,我不断收到此错误:

Traceback(最近一次调用最后一次):文件“main.py”,第 279 行,文件“qhue.py”,第 39 行,调用类型错误 :函数不采用关键字参数

获取所有灯光的 main.py 代码(b = qhue.py 中的函数)

lights = b.lights   # Creates a new Resource with its own URL

这个错误是如何发生的,我该如何解决?对我来说,似乎使用 **kwargs 将允许函数定义它自己的参数(如 timeout= 和 data=)

标签: pythonwifitypeerrortracebackmicropython

解决方案


推荐阅读