多个 if-raise 语句

问题描述 投票:0回答:1

我写了一个Python代码,格式如下:

if a1 in list1:
    if b1 == 1 and c1>1:
        raise Exception ('invalid c1 for b1')
    elif b1 == 2 and c1>2:
        raise Exception ('invalid c1 for b1')
    elif b1 == 3 and c1>3:
        raise Exception ('invalid c1 for b1')
    else
        z = c1 * d * f
else:
    raise Exception ('invalid a1')

我对我的代码进行了 pylint 测试,它显示了一个错误:“在“raise”之后不需要“elif”。将“elif”更改为“if””。我按照下面的代码做了:

if a1 in list1:
    if b1 == 1 and c1>1:
        raise Exception ('invalid c1 for b1')
    if b1 == 2 and c1>2:
        raise Exception ('invalid c1 for b1')
    if b1 == 3 and c1>3:
        raise Exception ('invalid c1 for b1')
    else
        z = c1 * d * f
else:
    raise Exception ('invalid a1')

现在,pylint 说“在“raise”之后出现不必要的“else”,删除“else”并取消缩进其中的代码”。我并不热衷于这样做,因为两个“else”语句涉及两种不同的情况。我想知道是否有更好的方法来实现此代码, pylint 不会引发任何问题。 (我知道我可以使用“#pylint disable=...”禁用 pylint 错误,但这不是我的第一个选择)

python if-statement testing pylint raise
1个回答
0
投票

根据 pylint 文档,

raise Exception
不应成为
else
elif
块的一部分。

根据 pylint,你的代码应该如下所示:

if a1 not in list1:
    raise Exception('invalid a1')

if b1 == 1 and c1 > 1:
    raise Exception('invalid c1 for b1')
if b1 == 2 and c1 > 2:
    raise Exception('invalid c1 for b1')
if b1 == 3 and c1 > 3:
    raise Exception('invalid c1 for b1')

z = c1 * d * f
© www.soinside.com 2019 - 2024. All rights reserved.