如何处理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})
我一直在使用带有 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})