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

2024-04-29 04:54:44 发布

您现在位置:Python中文网/ 问答频道 /正文

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

    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)

因此,由于bc和d都可能为零,我想创建一个实例,如果由于bc或d为零而导致pmc或e最终未定义,那么我只想将一个特定的未定义变量(pmc或e)设置为0。例如,如果pmc全部被划分为浮点数,但d是0,而e是未定义的,我想返回p、m和c的数值,但e是0。我如何做到这一点?我上面的代码将pmc和e全部设置为0,如果pmc或e中只有一个变量未定义。我知道我可能会强制执行此操作,并尝试除4个变量外的其他每个变量,但我正在寻找缩短这段代码的方法


Tags: 实例代码floatcentralprintbc未定义try
3条回答

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

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)

您最好使用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 ]

您可以编写一个函数来尝试除法并返回默认值

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))

相关问题 更多 >