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