bymyside_ 发表于 2022-6-9 11:06:07

if嵌套for循环列表条件时与预期不符的原因?

try:
    grate =
    if :
      raise OverflowError
except ValueError:
    print('请重新输入!')
except OverflowError:
    print('请输入0~100之间的数字!')


>>>input60 60 60
>>>请输入0~100之间的数字!

Process finished with exit code 0


if 遍历了grate里的数字,然后用not返回布尔值,按预期不应该抛出OverflowErrow的异常的,但是为什么抛出了。

fish_游鱼 发表于 2022-6-9 12:11:53

傻眼貓咪 发表于 2022-6-9 11:59
用 all()

x =


看前面代码的逻辑,应该是存在True的情况下,返回出抛出异常,这里用all判断逻辑是不对的,应该用filter会好点
try:
    grate =
    if list(filter(lambda x: not (0 <= x <= 100), grate)):
      raise OverflowError
except ValueError:
    print("请重新输入!")
except OverflowError:
    print("请输入0~100之间的数字!")

fish_游鱼 发表于 2022-6-9 11:45:46

grate =
tmp =
print(tmp)
你打一下这个列表就明白了,不管是不是false,列表都不是空的,非空列表在if判断时被视作True

bymyside_ 发表于 2022-6-9 11:54:01

fish_游鱼 发表于 2022-6-9 11:45
你打一下这个列表就明白了,不管是不是false,列表都不是空的,非空列表在if判断时被视作True

那是不是只能用for循环一个个判断。。。

傻眼貓咪 发表于 2022-6-9 11:59:27

bymyside_ 发表于 2022-6-9 11:54
那是不是只能用for循环一个个判断。。。

用 all()

x =
y = all(x) # y = False

傻眼貓咪 发表于 2022-6-9 12:25:00

fish_游鱼 发表于 2022-6-9 12:11
看前面代码的逻辑,应该是存在True的情况下,返回出抛出异常,这里用all判断逻辑是不对的,应该用filter ...

我只是提出思路/概念,当然代码可以随着自己需求自行调整,用 all、any、filter、map等都可以
页: [1]
查看完整版本: if嵌套for循环列表条件时与预期不符的原因?