Python Wolfram Alpha API: StopIteration

Как я могу избежать ошибки остановки итерации? Я не знаю о каких-либо функциях или циклах, через которые может выполняться код.

import wolframalpha

client = wolframalpha.Client('My Key is Goes Here')
res = client.query('pi')

print next(res.results).text

person K. W. Cooper    schedule 01.03.2016    source источник


Ответы (2)


Я никогда не использовал wolframalpha, но похоже, что так и должно быть

for result in res.results:
    print result.text

Изменить: я установил wolframalpha и вижу, что этот запрос (и другие, которые я пробовал) не дал результатов в res.results. Вместо этого у них есть pods. Вы можете перебирать модули как в документации:

for pod in res.pods:
    print '{p.title}: {p.text}'.format(p=pod)
person matiasg    schedule 01.03.2016

Использование вами next создает ошибку StopIteration. API Python для Wolframalpha предоставляет итератор для циклического просмотра результатов (next просто получает «следующий» результат вместо всех)

Вы можете перехватить ошибку с помощью предложения try/except:

try:
    print next(res.results).text
except StopIteration:
    print "No results"
person Gerrat    schedule 01.03.2016
comment
Однако на самом деле это не решает проблему, потому что тогда ничего не будет напечатано. - person K. W. Cooper; 02.03.2016
comment
Если это было напечатано раньше, то будет и после. Получение ошибки StopIteration при вызове next означает, что next результатов нет. Мое решение останавливает распространение этого исключения (и вы можете не печатать результаты в предложении except, если вам это больше нравится). - person Gerrat; 02.03.2016