Python: TypeError: объект 'NoneType' недопустим для строки результатов = данные ['responseData'] ['результаты']

1

Когда я запускаю код, он оказался следующим: TypeError: объект "NoneType" не является индексируемым

Я начинающий Python. Я просто выбрал образец проекта с сайта для начинающего Python: https://www.pythonforbeginners.com/code-snippets-source-code/google-command-line-script/ Я использую Pycharm Community Edition. После ссылки на онлайн-помощь по поиску в Интернете я отредактировал некоторые строки кода для запуска, но, наконец, я застрял в этой ошибке. Спасибо за помощь.

import json
from pip._vendor.distlib.compat import raw_input
import urllib.request

url = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&"

query = raw_input("What do you want to search for ? >> ")

query = urllib.parse.urlencode({'q': query})

response = urllib.request.urlopen(url + query).read()

data = json.loads(response)

results = data['responseData']['results']

for result in results:
    title = result['title']
    url = result['url']
    print(title + '; ' + url)
  • 0
    какую версию python вы используете? модуль urllib значительно изменился между Python 2 и 3. Это может быть причиной вашей ошибки
  • 0
    Вы запускаете скрипт в консоли python? Я думаю, что скрипт был создан для запуска из командной строки
Показать ещё 2 комментария
Теги:

1 ответ

1

Он ожидал, что веб-сайт отправит вам что-то, содержащее responseData, и он должен содержать результаты, но по какой-то причине (ошибка?) Они отправили вам разные данные. Всегда проверяйте, что у вас есть до использования.

Здесь, как проверить, получили ли вы ожидаемое:

if 'responseData' in data:
      if 'results' in data['responseData']:
              #-- do stuff 
      else:
              print('Error: no results. Data was:' + data)
else:
      print('Error: no responses. Data was:' + data)

Кроме того, вы можете попробовать использовать команду pprint для печати структуры данных, чтобы узнать, что у вас есть:

from pprint import pprint
pprint(data)

Это поможет вам во всех шагах, чтобы узнать, какой фактический ответ вы получили, какие данные и т.д.

  • 0
    Спасибо вам большое! Меня устраивает.
  • 0
    Можете ли вы пометить ответ как принятый?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню