TypeError: unhashable тип: 'set' в HTTP-запросе GET - PullRequest
0 голосов
/ 28 мая 2019

Я пытаюсь выполнить приведенную ниже функцию python, чтобы проверить состояние счета из внешнего API:

def getInvoice(inv_id):
    response = requests.get("https://api.example.com/invoices/"+str(inv_id)+"?access_token=123456789").json()
    return response

print(getInvoice("5b5f60384b3f"))

Когда я пытаюсь вызвать функцию, я получаю следующую ошибку:

 Traceback (most recent call last):
  File "C:\Users\user\Desktop\app\db.py", line 82, in <module>
    print(getInvoice("5b5f60384b3f"))
  File "C:\Users\user\Desktop\app\db.py", line 79, in getInvoice
    response = requests.get("https://api.example.com/invoices/"+str(inv_id)+"?access_token=123456789").json()
TypeError: unhashable type: 'set'
[Finished in 3.0s]

Я не понимаю, почему это происходит, или где «набор»?Любая помощь очень ценится.

Ответы [ 2 ]

0 голосов
/ 28 мая 2019

Как уже упоминалось, похоже, что сервер не отвечает с JSON.

Измените функцию getInvoice и проверьте ответ сервера:

def getInvoice(inv_id):
    url = "https://api.example.com/invoices/{}?access_token=123456789".format(inv_id)
    response = requests.get(url)
    response.raise_for_status()  # you will get an exception if HTTP status code != 200

    try:
        return response.json()
    except:  # for debugging purposes only
        print("Failed to obtain JSON response. Response contents:\n{}".format(response.text))
        raise
0 голосов
/ 28 мая 2019

Похоже, ваш URL не возвращает JSON-ответ. Я предлагаю вам скопировать код, прочитав ответ в виде текста и проверить, что он действительно содержит.

import urllib.request

contents = urllib.request.urlopen("https://api.example.com/invoices/"+str(inv_id)+"?access_token=123456789").read()

print(contents);
...