绕过错误在执行循环时除以零 - Python

时间:2017-10-27 00:58:20

标签: python

使用Python的新内容:)我正在尝试使用不同的列来规范化我的数据但是,有时会发生我用来制作除法的某些列的值为0.然后给出错误:ZeroDivisionError为零。

我有一个数据帧mergedfs并循环遍历列以计算规范化值。

b = 0
w = (len(files))+1 #number depending on how many csv files I have. This will determine which columns index I will use.
while b < len(files):
    b += 1
    if b == 1:
        w += 1
        mergedfs.insert(len(files)+1+b, 'NHAF R{}'.format(b), np.log10((((mergedfs.ix[:,b] / mergedfs.ix[:,w])/106)/((mergedfs.ix[:,b].sum() / (mergedfs.ix[:,w].sum())/106)) / sum(((mergedfs.ix[:,b] / mergedfs.ix[:,w])/106)/((mergedfs.ix[:,b].sum() / (mergedfs.ix[:,w].sum())/106))))))
    else:
         w += 2
         mergedfs.insert(len(files)+1+b, 'NHAF R{}'.format(b), np.log10(((mergedfs.ix[:,b] / mergedfs.ix[:,w])/106)/((mergedfs.ix[:,b].sum() / (mergedfs.ix[:,w].sum())/106)) / sum(((mergedfs.ix[:,b] / mergedfs.ix[:,w])/106)/((mergedfs.ix[:,b].sum() / (mergedfs.ix[:,w].sum())/106)))))

归零的ZeroDivisionError通常是因为有时候。 mergedfs.ix [:,b] AND mergedfs.ix [:,b]将等于0.

有没有办法绕过它?

I have tried np.log10((((mergedfs.ix[:,b] / mergedfs.ix[:,w])/106)/((mergedfs.ix[:,b].sum() / (mergedfs.ix[:,w].sum())/106)) / sum(((mergedfs.ix[:,b] / mergedfs.ix[:,w])/106)/((mergedfs.ix[:,b].sum() / (mergedfs.ix[:,w].sum())/106)))).where(mergedfs.ix[:,b] != 0)

然而,没有成功。

我已经在stackoverflow上搜索了很长时间,而且大多数都没有在我的代码上工作。

非常感谢你能指导我解决这个问题。

干杯!

1 个答案:

答案 0 :(得分:1)

try..except中的代码嵌入以捕获异常。忽略pass

之外的异常
try:
   while b < len(files):
    b += 1
    if b == 1:
        w += 1
        mergedfs.insert(len(files)+1+b, 'NHAF R{}'.format(b), np.log10((((mergedfs.ix[:,b] / mergedfs.ix[:,w])/106)/((mergedfs.ix[:,b].sum() / (mergedfs.ix[:,w].sum())/106)) / sum(((mergedfs.ix[:,b] / mergedfs.ix[:,w])/106)/((mergedfs.ix[:,b].sum() / (mergedfs.ix[:,w].sum())/106))))))
    else:
         w += 2
         mergedfs.insert(len(files)+1+b, 'NHAF R{}'.format(b), np.log10(((mergedfs.ix[:,b] / mergedfs.ix[:,w])/106)/((mergedfs.ix[:,b].sum() / (mergedfs.ix[:,w].sum())/106)) / sum(((mergedfs.ix[:,b] / mergedfs.ix[:,w])/106)/((mergedfs.ix[:,b].sum() / (mergedfs.ix[:,w].sum())/106)))))

except ZeroDivisionError as err:
   pass

一种新颖的方法是抑制异常:

from contextlib import suppress

with suppress(ZeroDivisionError):
  {your code goes here}