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

How to handle skipped items in a for loop

我一直在使用带有 bottlenose 的亚马逊产品 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 的新手,并且尽我所能努力编写代码...

我相信你有一个糟糕的缩进问题。 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 子句来处理异常值或情况,并且 return 程序进入有效状态。例如:

 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})

continue 进入循环的下一次迭代,因此您可以跳过循环体的其余部分。相反,您应该为变量分配一个默认值。

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

您也可以尝试添加检查项目是否具有标签 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})