带有 "general" 异常消息的条件“try”语句

Conditional `try` statement with a "general" exception message

我想 try 在条件为真时加载文件。如果发生文件异常或条件为假,我想要执行第二(一行)代码。

为了涉及鸟类,请考虑以下代码:

if try_to_fly:
    try:
        fly()
    except FlyError:
        walk("I'm walking instead of flying.")
else:
    walk("I'm walking stead of flying.")

# more lines below #

这就是我想做的。但是,它有两次 walk("I'm walking stead of flying.") 行,最好避免。

此外,在此位下方还有更多代码需要执行,因此我们不能 return 在 try 语句中不考虑该代码。

是否有更 pythonic 的方法来做到这一点?

飞行成功可以设置变量

flying = False
if try_to_fly:
    try:
        fly()
        flying = True
    except FlyError:
        pass
if not flying:
    walk("I'm walking instead of flying.")

不使用任何附加变量:

try:
    if try_to_fly:
        fly()
    else:
        walk("I'm walking stead of flying.")
except FlyError:
    walk("I'm walking instead of flying.")

您可以设置一个 bool 标志

b_need_print = True

if try_to_fly:
    try:
        fly()
        b_need_print = False
    except FlyError:
        pass

if b_need_print:
    walk("I'm walking stead of flying.")

所有答案都很好,但这可能对您有所帮助:

try:
    if try_to_fly:
        fly()
    else:
        raise FlyError()
except FlyError:
    walk("I'm walking instead of flying.")

猜猜你想要这个:try / except / else 这种方式可以让你免于其他 if 语句

class FlyError(Exception): pass

def fly(tickets=True):

    if tickets:
       # ...
       verify = True
       # etc
    else:
       raise FlyError("no tickets")


if __name__ == "__main__":

    for tickets in [ None, True]:
        try:
            print("My tickets: ", tickets)
            fly(tickets)
        except FlyError as e:
            print("I'm walking instead of flying.")
        else:
            print("Nicely by plane!")

输出:

('My tickets: ', None)
I'm walking instead of flying.
('My tickets: ', True)
Nicely by plane!