JSONDecodeError(«Ожидаемое значение», s, err.value) из None

#python #json

#python #json

Вопрос:

Я пытаюсь получить несколько сведений из pokeapi, но я продолжаю получать JSONDecodeError при поиске формы определенных покемонов. Когда я ищу charmander, это работает, но когда я ищу pidgey — нет. Вот код:

 pokename = input('Digite o nome do Pokémon que você deseja consultar: ')

formas = requests.get(f'https://pokeapi.co/api/v2/pokemon-form/{pokename}/')
forms_data = formas.json()
  

И вот ошибка:

 Digite o nome do Pokémon que você deseja consultar: pidgey
Traceback (most recent call last):
File "c:/Users/perei/Evylla/DEV/python/pokemons.py", line 14, in <module>
status_data = status.json()
File "C:UserspereiAppDataLocalProgramsPythonPython38-32libsite-packagesrequestsmodels.py", 
line 898, in json
return complexjson.loads(self.text, **kwargs)
File "C:UserspereiAppDataLocalProgramsPythonPython38-32libjson__init__.py", line 357, in 
loads
return _default_decoder.decode(s)
File "C:UserspereiAppDataLocalProgramsPythonPython38-32libjsondecoder.py", line 337, in 
decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:UserspereiAppDataLocalProgramsPythonPython38-32libjsondecoder.py", line 355, in 
raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
  

Комментарии:

1. Очевидно, что вы не получаете ответ в формате JSON — вы пробовали распечатать ответ или сохранить в файл (перед тщетной попыткой декодирования в формате JSON), чтобы вы могли изучить ответ?

2. Я не просто пытался декодировать как JSON, потому что думал, что это красиво, у меня есть другие запросы, которые работали точно так же. Это было единственное, что выдавало мне ошибку, и я хотел понять, почему, поскольку открытие ссылки и замена ‘pokename’ на имя нужного мне покемона работало. Но я уже понял, спасибо.

3. Ответ не будет декодироваться как JSON: все, что вам нужно сделать, это изучить ответ, чтобы выяснить, почему.

Ответ №1:

Проблема, вероятно, в вашем вводе pokename . API может возвращать 404 для искаженного pokename

попробуйте приведенный ниже код.

 import requests

#replace xx by bulbasaur and the code will print JSON.
k = requests.get('https://pokeapi.co/api/v2/pokemon-form/xx') 
if k.status_code == 200:
    print(k.json())
else:
    print("error",k.status_code)