Python 'функция не принимает аргументы ключевого слова' ошибка, используя ** kwargs с запросами - PullRequest
0 голосов
/ 05 ноября 2018

Быстрый обзор проекта: я пытаюсь создать контроллер для моих светильников Philips Hue, используя LoPy. Чтобы получить информацию от Hue API, мне нужно установить соединение (которое работает) и отправить информацию в API, проблема в этой части.

Поскольку LoPy не может использовать библиотеку «запросов», я использую библиотеку «urequests», функции, используемые для отправки запросов, выглядят следующим образом

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, вызывая, таким образом, функцию get () в urequests.py, но по какой-то причине я продолжаю получать эту ошибку:

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 =)

...