Python异常处理中“ else”的必要性是什么?

时间:2018-12-15 14:03:24

标签: python exception exception-handling

我无法理解以下控制流程。

try:
    # normal execution block
except A:
    # handle exception A
except B:
    # handle exception B
except:
    # handle other exceptions
else:
    # if no exceptions, go here
finally:
    # always do this

在这种情况下,我不了解else的目的。我来自Java,那里没有else子句来处理异常。

如果我要在else部分中写东西,我会假设我也可以直接在异常处理部分之外写它。

那么,Python异常处理中else子句的必要性是什么?

2 个答案:

答案 0 :(得分:2)

  

如果我要在else子句中写一些东西,我也可以直接在异常句柄部分之外写。

否。

def with_else(x):    
    try:
        int(x)
    except ValueError:
        print('that did not work')
    else:
        print('that worked!')

def without_else(x):    
    try:
        int(x)
    except ValueError:
        print('that did not work')

    print('that worked!')

演示:

>>> with_else(1)                                                                                                       
that worked!
>>> without_else(1)                                                                                                    
that worked!
>>> with_else('foo')                                                                                                   
that did not work
>>> without_else('foo')                                                                                                
that did not work
that worked!

答案 1 :(得分:0)

processing = True

try:
    x = might_raise_a_key_error()
    # a
except KeyError:
    ...
else:
    # b
finally:
    processing = False

# c

如果您有一段代码,其中1)依赖于x,2)您不想由except KeyError处理,但是3)您确实希望被finally覆盖子句,您将其放在# a# b还是# c中?

答案:# b