首页 文章

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

提问于
浏览
0

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

我有一个dataframe 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 回答

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

相关问题