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

3

所以我正在尝试设置由其他可能为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为零而变为未定义,那么我只想将特定的未定义变量(p、m、c或e)设置为0。例如,如果p、m、c都被除成浮点数,但d为0且e变成未定义,我想返回p、m和c的数字值,但e为0。如何实现这一目标?我的代码会将p、m、c和e全部设为0,即使只有一个变量在p、m、c或e中是未定义的。我知道我可能可以通过对四个变量中的每一个进行try except来解决问题,但我正在寻找一种缩短这段代码的方法。

请更新您的示例以包括变量的值。它们是字符串吗? - tdelaney
是的,它们是字符串,但在计算时无论如何都是浮点数。 - dl784
是的,我注意到了float()部分。奇怪的是你没有添加初始化。 - tdelaney
3个回答

2
你可以编写一个函数来尝试除法并返回一个默认值。
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))

1
你需要检查每个条目,但可以用最少的代码来实现。
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)

我认为 a 是一个字符串。我也被这个误导了! - tdelaney

0

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接