一行中有多个异常。蟒蛇

时间:2019-12-06 05:23:02

标签: python

没有很多尝试/例外,有没有办法做到这一点? 我有30多个分区,并且所有try / except的代码都很长

def test():
    a = 12
    b = 0
    c = 43
    d = 0
    try:
        w = a / b
    except Exception:
        w = 'cant'
    try:
        x = b / c
    except Exception:
        x = 'cant'
    try:
        y = c / d
    except Exception:
        y = 'cant'
    print(w)
    print(x)
    print(y)

3 个答案:

答案 0 :(得分:2)

当您要使用不同的值执行三次相同的操作时,请将其分解为一个函数。请注意,您无需在此处捕获错误。您可以在执行此操作之前使用if / else来测试该部门是否可以工作:

def divide_or_cant(p, q):
    if q == 0:
        return 'cant'
    else:
        return p / q

def test():
    a = 12
    b = 0
    c = 43
    d = 0
    w = divide_or_cant(a, b)
    x = divide_or_cant(b, c)
    y = divide_or_cant(c, d)
    print(w)
    print(x)
    print(y)

如果要执行此操作 30次,那么最好将数据放入列表并编写循环:

def test():
    nums = [12, 0, 43, 0]
    for a, b in zip(nums, nums[1:]):
        r = divide_or_cant(a, b)
        print(r)

答案 1 :(得分:1)

根据您的情况,您可以定义一个函数来实现此目的:

def divide(a, b):
    try:
        return a / b
    except:
        return 'cant'

def test():
    a = 12
    b = 0
    c = 43
    d = 0
    w = divide(a, b)
    x = divide(b, c)
    y = divide(c, d)
    print(w)
    print(x)
    print(y)

答案 2 :(得分:1)

代码:

def try_or_error(supplier, msg):
    try:
        return supplier()
    except:
        return msg


def test():
    a = 12
    b = 0
    c = 43
    d = 0
    w = try_or_error(lambda: a / b, 'cant')
    x = try_or_error(lambda: b / c, 'cant')
    y = try_or_error(lambda: c / d, 'cant')
    print(w)
    print(x)
    print(y)


if __name__ == '__main__':
    test()
相关问题