尽管使用“&”运算符检查长度,但列表索引超出范围

时间:2021-03-15 19:54:44

标签: python python-3.x list if-statement

我正在检查参数的长度,如果它等于特定值,则应输入 if。如果不是,它应该进入else

print(len(sys.argv))
if (
    (len(sys.argv) == 9)
    & (sys.argv[8] == "framework")
):
    employeeId = userid + "frame"
    print("frame")
else:
    employeeId = userid

print("userid")

现在传递的 len(sys.argv) 是 7 并且应该打印“userid”,但我收到了错误

<块引用>

列表索引超出范围

2 个答案:

答案 0 :(得分:1)

Python 中的逻辑“与”运算符是 and,而不是 &

& 是一个按位运算符,对于布尔值的工作方式可能类似,但与 and 相比,即使第一个参数为假,它也始终计算两个参数。

因此,如果 len(sys.argv) 为 7,则 sys.argv[8] 超出范围。

对于 andsys.argv[8] 不会被评估,因为您正确设置的条件 len(argv) == 9 是错误的。 and 运算符的此属性称为“短路”。

答案 1 :(得分:-1)

看看这个:

(len(sys.args) == 9)
    & (sys.argv[8] == "framework")

您使用的是 &,它是按位运算符,而不是条件 and

结果如下:

1 & sys.argv[8] == "framework"

因为第一个 == 有效,并且 if 无法确定它是否为真,它会不断检查并运行 sys.argv[8],在您的情况下将无效

您要搜索的是 and 为:

len(sys.args) == 9 and sys.argv[8] == "framework"