Python 移除 try inside except?

Python remove try inside except?

在 python 中,我有一个名为 func() 的函数可以引发 NoSuchElementException: 我正在尝试用 input1 调用它,如果不正确,请用 input2 调用它,否则放弃。

为了清晰起见,是否有更好的方法来编写此代码:

submit_button = None
try:
    submit_button = func(input1)
except NoSuchElementException:
    try:
        submit_button = func(input2)
    except NoSuchElementException:
        pass

你可以这样做:

for i in [input1, input2]:
    try:
        submit_button = func(i)
        break
    except NoSuchElementException:
        print(f"Input {i} failed")
else:
    print("None of the options worked")

如果第一个输入没有抛出异常,则中断循环,否则继续循环并尝试第二个输入。

通过这种方式,您可以尝试任意多的输入,只需将它们添加到列表中即可

如果您从未中断循环,最后的 else 将执行,这意味着 none 个选项有效

如果您想尝试多个输入并平等对待它们,这很有效。对于只有两个输入,您的代码对我来说看起来足够可读。 (试试这个,如果不行就试试那个)

只是另一种选择...

from contextlib import suppress

submit_button = None
for i in input1, input2:
    with suppress(NoSuchElementException):
        submit_button = func(i)
        break