我无法理解以下控制流程。
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
子句的必要性是什么?
答案 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
。