我正在使用将其API与Bottlenose一起使用并通过BeautifulSoup解析xml响应来查找来自亚马逊的产品价格。
我有一个预定义的产品列表,代码可以通过这些列表进行迭代。
这是我的代码:
import bottlenose as BN
import lxml
from bs4 import BeautifulSoup
i = 0
amazon = BN.Amazon('myid','mysecretkey','myassoctag',Region='UK',MaxQPS=0.9)
list = open('list.txt', 'r')
print "Number", "New Price:","Used Price:"
for line in list:
i = i + 1
listclean = line.strip()
response = amazon.ItemLookup(ItemId=listclean, ResponseGroup="Large")
soup = BeautifulSoup(response, "xml")
usedprice=soup.LowestUsedPrice.Amount.string
newprice=soup.LowestNewPrice.Amount.string
print i , newprice, usedprice
效果很好,并且会遍历我的亚马逊产品列表,直到到达该标签集like no new/used price.没有任何价值的产品为止
Python将在哪个位置引发此响应:
AttributeError: 'NoneType' object has no attribute 'Amount'
这很有意义,因为我搜索的BS没有找到标签/字符串。从我要实现的目标来看,没有任何值是完全可以的,但是此时代码会崩溃,并且不会继续。
我试过了:
if soup.LowestNewPrice.Amount != None:
newprice=soup.LowestNewPrice.Amount.string
else:
continue
并且还尝试了:
newprice=0
if soup.LowestNewPrice.Amount != 0:
newprice=soup.LowestNewPrice.Amount.string
else:
continue
我在收到无类型值返回后如何继续不知所措。不确定问题是从根本上还是我正在使用的语言还是库中。
最佳答案
您可以使用异常处理:
try:
# operation which causes AttributeError
except AttributeError:
continue
将执行try块中的代码,如果引发AttributeError,则该执行将立即放入except块中(这将导致循环中的下一项运行)。如果未引发错误,则代码将愉快地跳过except块。
如果您只想将缺失值设置为零并打印,则可以
try: newprice=soup.LowestNewPrice.Amount.string
except AttributeError: newprice=0
try: usedprice=soup.LowestUsedPrice.Amount.string
except AttributeError: usedprice=0
print i , newprice, usedprice
关于python - 从xml解析收到None响应后如何继续,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35266643/