我是Wolfram|Alpha API python的新手,在互联网上找不到太多帮助,所以我转向堆栈溢出。在Wolfram|Alpha上的一些查询中,我收到了"NameError:name‘pod’is not defined"。任何帮助都将不胜感激。当我输入我的查询"法拉利458的长度"时,我过去常常会出现StopIteration错误,现在我已经将代码更改为使用"pods"方法。现在我收到一个NameError。输出应该能告诉我汽车的长度(https://www.wolframalpha.com/input/?i=length+of+ferrari+458)我不得不把app_id换成x,因为它不是我的,很抱歉给你带来不便。
#!/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
如果您计划使用生成器两次,而不进行两次查询,则可以使用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=<your-app-id>
生成:
<?xml version='1.0' encoding='UTF-8'?>
<queryresult success='false'
error='false'
numpods='0'
datatypes=''
timedout=''
timedoutpods=''
timing='2.742'
parsetiming='0.79'
parsetimedout='false'
recalculate=''
id='MSPa12051ddfeh1dgh883d2e000035eh08fba72b042e'
host='http://www4f.wolframalpha.com'
server='9'
related=''
version='2.6'
profile='EnterDoQuery:0.,StartWrap:2.74235'>
<didyoumeans count='2'>
<didyoumean score='0.365929' level='medium'>Ferrari 458</didyoumean>
<didyoumean score='0.26087' level='low'>length</didyoumean>
</didyoumeans>
</queryresult>
API文档中不清楚如何从那里获取web界面设法提取的2015 Ferrari 458 Italia | overall length
查询。
可以使用ElementTree
API:通过Result.tree
属性访问didyoumean
元素
>>> res = client.query('length of a Ferrari 458')
>>> for didyoumean in res.tree.findall('//didyoumean'):
... print didyoumean.text
...
Ferrari 458
length
如果序列为空next
将引发异常。
将None
作为第二个参数传递,作为默认值返回。来自链接文档:
next(iterator[, default])
通过调用迭代器的next()
方法,从该迭代器中检索下一个项。如果给定了默认,则在迭代器耗尽时返回该值,否则将引发StopIteration
。
如果没有结果,并且您不想处理异常:
first = next(res.results, None)
if first:
print(first.text)
如果没有结果,first
将是None
,然后您可以在尝试使用它之前检查它。