Wolfram | Alpha API Python名称错误:名称';pod';没有定义

Wolfram | Alpha API Python名称错误:名称';pod';没有定义,python,python-3.x,wolframalpha,Python,Python 3.x,Wolframalpha,我是python的Wolfram | Alpha API新手,在互联网上找不到太多帮助,所以我转向了堆栈溢出。在Wolfram | Alpha的一些查询中,我收到了“NameError:name'pod'未定义”。任何帮助都将不胜感激。当我输入我的查询“Ferrari458的长度”时,我曾经以StopIteration错误结束,现在我已经将代码更改为使用“pods”方法。现在我得到一个名称错误。输出应该给我车的长度()我必须x出应用程序id,因为它不是我的,很抱歉给您带来不便 #!/usr/bi

我是python的Wolfram | Alpha API新手,在互联网上找不到太多帮助,所以我转向了堆栈溢出。在Wolfram | Alpha的一些查询中,我收到了“NameError:name'pod'未定义”。任何帮助都将不胜感激。当我输入我的查询“Ferrari458的长度”时,我曾经以StopIteration错误结束,现在我已经将代码更改为使用“pods”方法。现在我得到一个名称错误。输出应该给我车的长度()我必须x出应用程序id,因为它不是我的,很抱歉给您带来不便

#!/usr/bin/python
import wolframalpha
app_id=('xxxxxx-xxxxxxxxxx')
client = wolframalpha.Client(app_id)

query = input("Query:")
if len(res.pods) > 0:
texts = ""
pod = res.pods[1]

if pod.text:
  texts = pod.text

else:
  texts = "I have no answer for that"

texts = texts.encode('ascii', 'ignore')
print (texts)
我得到的错误是:

 Query: length of ferrari 458
   Traceback (most recent call last):
     File "Wolfram.py", line 24, in <module>
       if pod.text:
  NameError: name 'pod' is not defined
查询:法拉利458的长度
回溯(最近一次呼叫最后一次):
文件“Wolfram.py”,第24行,在
如果为pod.text:
NameError:未定义名称“pod”
如果序列为空,将引发异常

传递
None
作为第二个参数作为默认值返回。从链接:

next(迭代器[,默认值])

通过调用迭代器的
next()
方法,从迭代器中检索下一项。如果给定默认值,则在迭代器耗尽时返回,否则将引发
StopIteration

如果没有结果,并且您不想处理异常:

first = next(res.results, None)
if first:
    print(first.text)

如果没有结果,
首先
将是
,您可以在尝试使用它之前进行检查。

如果您计划使用生成器两次,而不需要进行两次查询,您可以使用
itertools.tee
来获得两份生成器副本供您使用:

from itertools import tee

res1, res2 = tee(res, 2)

# consume the first generator:
for pod in res1:
    ...
    ...

# you have a second generator you can use:
print(next(res2.results).text)
...
...
显示
res.pods
res.results
共享同一迭代器。您得到的错误仅仅意味着没有结果。请尝试其他查询

示例查询有效,例如:

>>> res = client.query('temperature in Washington, DC on October 3, 2012')
>>> print(next(res.results).text)
(21 to 27) °C (average: 24 °C)
(Wednesday, October 3, 2012)
>>> [p.title for p in res]
['Input interpretation', 'Result', 'History', 'Weather station information']
您的特定查询不会返回任何结果,显然是因为存在需要确认的假设;访问
http://api.wolframalpha.com/v2/query?input=length+of+a+Ferrari+458&appid=
生产:


法拉利458
长度
从API文档中不清楚如何从web界面提取到2015 Ferrari 458 Italia |总长度查询

您可以通过
Result.tree
属性访问
didyoumean
元素,使用:


res.results
生成器为空。我不熟悉API,也许
res.pods
共享同一个生成器?请更新您的问题,添加您期望的输出。这表明您需要使用其中一种,而不是两种技术。我使用了不同的方法-使用pods。回答问题的效率比以前提高了很多,不幸的是,有些问题仍然无法回答。是的,
next()
可以返回默认值,但这无助于解决没有结果的问题。然后你会在
.text
上得到一个属性错误。这个问题被提出为
停止迭代
问题,而不是空的
结果
属性问题。我希望能够在没有明显错误发生的情况下进行查询。例如,我的输入:“法拉利458的最高速度”,我希望它在没有停止迭代的情况下返回。由于我是新来的,我不太理解旁路none作为第二个参数作为默认值返回。@PeterWood:不,这是一个错误,这不起作用,我得到了一个
StopIteration
异常。没有*我希望这些结果部分以某种方式确定OP实际希望发生的事情。谢谢Martijin,很有用,但仍然没有给我问题的答案。使用Wolfram API回答这个问题没有可能的方法吗?我还没有找到一种方法。API文档也没有给出任何提示。
>>> res = client.query('length of a Ferrari 458')
>>> for didyoumean in res.tree.findall('//didyoumean'):
...     print didyoumean.text
...
Ferrari 458
length