如何在多个元素上使用 try except?

How do I use try except on multiple elements?

所以我试图设置几个值除以其他可能为 0 的变量,所以我决定使用 try except:

    try:
        p = pacific / float(a)
        m = mountain / float(b)
        c = central / float(c)
        e = eastern / float(d)
    except ZeroDivisionError:
        p = 0
        m = 0
        c = 0
        e = 0

    print(p)
    print(m)
    print(c)
    print(e)

因此,由于 a b c 和 d 都可能为零,我想创建一个实例,如果 p m c 或 e 由于 a b c 或 d 为零而最终未定义,那么我只想设置一个特定的undefined variable (p m c or e) to 0 例如,如果p m c 都划分成float,但是d为0,e变成undefined,我想return p,m,c的数值,但是e 为 0。我该如何实现?我上面的代码,如果 p m c 或 e 中只有一个变量未定义,则将 p m c 和 e 全部设置为 0。我知道我可能会蛮力这样做并尝试除了 4 个变量中的每一个,但我正在寻找一种方法来缩短这段代码。

您将需要检查每个条目,但您可以使用最少的代码来完成此操作

p = pacific  / float(a) if float(a)!=0 else 0
m = mountain / float(b) if float(b)!=0 else 0
c = central  / float(c) if float(c)!=0 else 0
e = eastern  / float(d) if float(d)!=0 else 0

print(p)
print(m)
print(c)
print(e)

您可以编写一个函数来尝试除法和 return 默认值。

def mydiv(a, b):
    try:
        return a/float(b)
    except ZeroDivisionError:
        return 0

p = mydiv(pacific, float(a))
m = mydiv(mountain, float(b))
c = mydiv(central, float(c))
e = mydiv(eastern, float(d))

您最好使用 numpy 数组,它具有很好的错误处理能力并且涉及的代码少得多。除以零产生无穷大,很容易用零代替。

import numpy as np
pmce  = np.array([1,2,3,4]) # numerator
abcd = np.array([5,6,0,8]) # denominator

with np.errstate(divide='ignore'):
    pmce_new = pmce/abcd
    pmce_new[np.isinf(pmce_new)] = 0

print(pmce_new)

输出:

[0.2    0.33333333     0.     0.5 ]