0

我一直在使用带有瓶鼻的亚马逊产品 API,并且在迭代 XML 响应时遇到了空类型错误。

我想我已经设法处理了一半,但是如果遇到此错误,它不会提取其他信息,因此显示的结果比实际结果少。

有没有办法正确处理这个问题,以便提取所有信息并忽略错误?

price_list = [{}]
    for i in price_search:
      lnp = i.LowestNewPrice.FormattedPrice.text
      qty_n = i.TotalNew.text
      qty_u = i.TotalUsed.text
      int_qty_u = int(qty_u)
    if int_qty_u > 0:
      lup = i.LowestUsedPrice.FormattedPrice.text
    else:
        continue
    price_list.append({'Lowest New Price': lnp, 'Lowest Used Price': lup, 'Quantity New': qty_n, 'Quantity Used': qty_u})

在这种情况下,它特别是LowestUsedPrice,如果一个项目没有这个标签,那么就会引发错误。
我是 Python 和编码的新手,所以我尽可能地挣扎......

4

3 回答 3

1

我相信你有一个糟糕的缩进问题。Python 通过其缩进定义一个块。您的 if/else 结构在 for 循环之外。这可能是您正在寻找的:

price_list = [{}]
for i in price_search:
  lnp = i.LowestNewPrice.FormattedPrice.text
  qty_n = i.TotalNew.text
  qty_u = i.TotalUsed.text
  int_qty_u = int(qty_u)
  if int_qty_u > 0:
      lup = i.LowestUsedPrice.FormattedPrice.text
  else:
      continue
  price_list.append({'Lowest New Price': lnp, 'Lowest Used Price': lup, 'Quantity New': qty_n, 'Quantity Used': qty_u})

除此之外,使用 try-except 子句来处理异常值或情况并将程序返回到有效状态。一个例子可能是:

 if int_qty_u > 0:
      try:
          lup = i.LowestUsedPrice.FormattedPrice.text
      except: #we catch any exception that could happend
          lup = '<null>' #just to put a string 

为了完成,我会在所有 for 块上做一个 try-except :

price_list = [{}]
for i in price_search:
  try:
      lnp = i.LowestNewPrice.FormattedPrice.text
      qty_n = i.TotalNew.text
      qty_u = i.TotalUsed.text
      int_qty_u = int(qty_u)
      if int_qty_u > 0:
          lup = i.LowestUsedPrice.FormattedPrice.text
      else:
         continue
  except:
      lnp,qty_n,qty_u,int_qty_u='null','null','null',-1 #multiple assignment in a bad case
  price_list.append({'Lowest New Price': lnp, 'Lowest Used Price': lup, 'Quantity New': qty_n, 'Quantity Used': qty_u})
于 2018-10-14T19:10:08.940 回答
0

continue转到循环的下一次迭代,因此您跳过循环体的其余部分。取而代之的是,您应该为变量分配一个默认值。

if int_qty_u > 0:
    lup = i.LowestUsedPrice.FormattedPrice.text
else:
    lup = "some default value"
于 2018-10-14T19:41:40.893 回答
0

您也可以尝试添加检查项目是否具有标签LowestUsedPrice

price_list = [{}]

for i in price_search:
    lnp = i.LowestNewPrice.FormattedPrice.text
    qty_n = i.TotalNew.text
    qty_u = i.TotalUsed.text
    int_qty_u = int(qty_u)
if int_qty_u > 0 and i.LowestUsedPrice != None:
    lup = i.LowestUsedPrice.FormattedPrice.text
else:
    lup = 'null'

price_list.append({'Lowest New Price': lnp, 'Lowest Used Price': lup, 'Quantity New': qty_n, 'Quantity Used': qty_u})
于 2018-10-14T20:07:21.007 回答