所以我试着用Openpyxl读取excel文件中的数字,并按SKU将它们相加。它有点工作,但Python似乎跳过了一些代码行,我不太明白为什么。你知道吗
基本上,我想把构成一个特定SKU的所有零件的成本加起来,并报告N-1月、本月和N+1的SKU总成本。但是当我运行代码时,它会得到一部分信息,而忽略其余的信息。你知道吗
代码:
for row in range(2, tab.max_row):
try:
if (tab[regCol + str(row)].value != "NAN" or \
tab[lobCol + str(row)].value != "Family"):
#Initialize missing SKUs
print("R{}:".format(row))
if tab[skuCol + str(row)].value not in skuMatrix:
print("Creating {}".format(tab[skuCol + str(row)].value))
skuMatrix[tab[skuCol + str(row)].value] = {}
skuMatrix[tab[skuCol + str(row)].value][tab[prevCost + str(1)].value] = float(0)
skuMatrix[tab[skuCol + str(row)].value][tab[currCost + str(1)].value] = float(0)
skuMatrix[tab[skuCol + str(row)].value][tab[nextCost + str(1)].value] = float(0)
#Update SKU value
skuMatrix[tab[skuCol + str(row)].value][tab[currCost + str(1)].value] += float(tab[currCost + str(row)].value)
print("\t[Curr] Updated value to {}".format(skuMatrix[tab[skuCol + str(row)].value][tab[currCost + str(1)].value]))
skuMatrix[tab[skuCol + str(row)].value][tab[nextCost + str(1)].value] += float(tab[nextCost + str(row)].value)
print("\t[Next] Updated value to {}".format(skuMatrix[tab[skuCol + str(row)].value][tab[nextCost + str(1)].value]))
skuMatrix[tab[skuCol + str(row)].value][tab[prevCost + str(1)].value] += float(tab[prevCost + str(row)].value)
print("\t[Prev] Updated value to {}".format(skuMatrix[tab[skuCol + str(row)].value][tab[prevCost + str(1)].value]))
except TypeError as te:
if not tab[prevCost + str(row)].value or \
not tab[currCost + str(row)].value or \
not tab[nextCost + str(row)].value:
pass
else:
print("Error adding {}".format(str(te)))
…下面是我运行它时实际发生的情况:
R233:
Creating 123-ABXY
[Curr] Updated value to 0.5983
[Next] Updated value to 0.5983
R234:
[Curr] Updated value to 0.8193
[Next] Updated value to 0.8193
R235:
[Curr] Updated value to 0.9753000000000001
[Next] Updated value to 0.9753000000000001
R236:
[Curr] Updated value to 1.0365
[Next] Updated value to 1.0365
R237:
[Curr] Updated value to 68.9565
[Next] Updated value to 68.9565
[Cost]
SKU Prior Current Current +1
123-ABXY $0.00 $68.96 $68.96
我不明白为什么它忽略了最后两个语句。如果没有数据,我可以理解显示$0.00(但是有)……无论如何,[Prev]print语句不应该出现吗?你知道吗
谢谢!你知道吗
TL;DR:静默忽略异常是bad idea:
如果不运行代码,我可以猜到您忽略的异常:
TypeError: 'NoneType' object has no attribute '__getitem__'
或TypeError: <type> indices must be integers, not NoneType
因为您试图在不检查对象是否可用的情况下索引对象:
如果
tab[skuCol + str(row)].value
或skuMatrix[tab[skuCol + str(row)].value]
是None
,这将抛出一个TypeError
并被静默忽略。你知道吗或者,它可能是
skuMatrix[tab[skuCol + str(row)].value]
是一个整数,它将给出TypeError: 'int' object has no attribute '__getitem__'
当您尝试索引它时。你知道吗或者为嵌套的
.value
和array[index]
调用提供十几个其他选项。你知道吗因为你默默地忽略了他们,你不知道那是什么。你知道吗
所以不要忽略类型错误。坏事情会发生。你知道吗
唯一应该忽略异常的时间是:
a)指定要忽略的异常(如您所做的)
b)您的代码在不处理该异常的情况下工作(它不会)
因此,您不能忽略这个异常。你知道吗
相关问题 更多 >
编程相关推荐