#python #json
#python #json
Вопрос:
Я пытаюсь создать оператор if на основе значения из используемого мной API. Этот API содержит значение кода состояния, "status"
. если это 404 (или другие) Я хочу вернуть ошибку, иначе продолжайте.
Пример JSON:
{
"data": {
"test_index": {
"test_a": [...], // 429 items
"test_b": [...] // 182 items
}
},
"status": 200
}
При выполнении кода ниже:
import json
import urllib.request as ur
API = ur.urlopen('https://example.com')
data = json.loads(API.read())
if data['status'][0] == 404:
print("404")
else:
print("Not 404")
Я получаю следующую ошибку:
TypeError: 'int' object is not subscriptable
Которое ссылается на строку 7, оператор if.
Как мне преобразовать это значение JSON во что-то, с чем я могу работать?
Комментарии:
1.
data['status']
является целым числом,200
в вашем примере, так что ожидалось отdata['status'][0]
?2. если вы проверите,
type(data['status'])
какой оператор be integer[]
(нижний индекс) не определен для integer, он определен для list, string, dict в основных типах.3.
data
это обычная структура данных Python, а не JSON. (Вы расшифровали ответ JSON с помощьюjson.loads
для того, чтобы определитьdata
; вы можете просто взглянуть на всеdict
, чтобы увидеть, как это выглядит.)
Ответ №1:
data['status']
является целым числом, и вы не можете проиндексировать целое число индексом, как вы делаете для списка, измените свой код следующим образом.
if data['status'] == 404:
print("404")
else:
print("Not 404")
Комментарии:
1. Большое вам спасибо! Похоже, мне нужно уточнить, когда и где индексировать. В качестве дополнительного примечания, если URL-адрес имеет код состояния 404, urllib не может его обработать и выдает HTTPError: Not Found. В итоге я использовал requests.get().
2. Отлично, рад, что я могу помочь!