我正在使用将其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/

10-16 22:21