如何处理for循环中跳过的项目

时间:2018-10-14 18:59:46

标签: python error-handling beautifulsoup amazon-product-api bottlenose

我一直在使用带有瓶颈的Amazon Product 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和编码的新手,所以我会竭尽全力...

3 个答案:

答案 0 :(得分: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})

答案 1 :(得分:0)

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

if int_qty_u > 0:
    lup = i.LowestUsedPrice.FormattedPrice.text
else:
    lup = "some default value"

答案 2 :(得分:0)

您还可以尝试添加一项检查,检查该项目是否带有标签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})

String