【问题标题】:Python: try-catch-else without handling the exception. Possible?Python:try-catch-else 不处理异常。可能的?
【发布时间】:2012-05-14 21:36:50
【问题描述】:

我是 python 新手,想知道是否可以在不处理异常的情况下创建 try-catch-else 语句?

喜欢:

try:
    do_something()
except Exception:
else:
    print("Message: ", line) // complains about that else is not intended

【问题讨论】:

    标签: python exception try-catch


    【解决方案1】:

    以下示例代码向您展示了如何使用 pass 捕获和忽略异常。

    try:
        do_something()
    except RuntimeError:
        pass # does nothing
    else:
        print("Message: ", line) 
    

    【讨论】:

    • 谢谢!我会在几分钟内将此答案标记为已更正(几分钟内不可能)
    • 问题是处理异常 - 使用raise 比使用pass 更好。
    【解决方案2】:

    虽然我同意 Jochen Ritzel 的回答是一个很好的答案,但我认为其中可能存在一些小疏忽。通过passing,异常 /is/ 正在处理中,但什么也没做。真的,异常被忽略了。

    如果你真的不想处理异常,那么异常应该是raised。以下代码对 Jochen 的代码进行了更改。

    try:
        do_something()
    except RuntimeError:
        raise #raises the exact error that would have otherwise been raised.
    else:
        print("Message: ", line) 
    

    【讨论】:

    • 这不是和do_something(); print("Message: ", line)一模一样吗?
    • @KirkStrauser 是的,但是explicit is better than implicit。任何用户都会看到预期的异常,然后向调用者提出异常,而无需查看 do_something 是否引发任何异常。
    • @Darthfett 我认为这太过分了。如果您认为可能会出现异常,则应正确处理它(即使这只是打印用户友好的消息),否则,请忽略它。
    • 如果是我,do_something() 不会raise。我会打电话给do_something,然后明确地打电话给raise
    • 请注意:如果您想处理 else AND finally,这种格式确实很有用,但允许异常不受阻碍地传播。 (例如,从else 上的函数返回,关闭finally 上获取的连接,并让脚本的其余部分正常处理except
    猜你喜欢
    • 2011-04-01
    • 1970-01-01
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    • 2012-05-04
    相关资源
    最近更新 更多