关于小悟志网站地图归档友情链接联系Feed

云上小悟 + 

首页 » InfoTech »

Python异常处理中的else和finally

InfoTech
2017年1月17日 / 129次阅读
标签:麦新杰用Python

拍拍贷

文章《Python异常处理中的else和finally》的特色图片

Python语言可能是最接近人类能够自然理解的编程语言,但是编程语言跟人类语言有个非常明显的区别,那就是灵活性。人类语言很灵活,怎么说对方都能够理解,语法什么的,在日常对话中并不重要;但是用编程语言写代码,就必须严格按照既定语法来书写,否则就是syntax error。本文总结Python语言在进行异常处理(使用try.....except......语句)时,所使用的else和finally的具体含义。

 

Python循环语句中的else分支一文中,简单提到了异常处理时的else,这里再详细总结:

1, else是异常处理时的一个可选分支;

2, 必须出现在所有except的分支之后;

3, 什么时候执行else分支:在try部分代码没有发生异常的时候;换言之,如果try部分发生了异常,就不再执行else分支;

 

异常处理中的finally分支与else不一样!

Python官方教程是这样解释的:

A finally clause is always executed before leaving the try statement, whether an exception has occurred or not. When an exception has occurred in the try clause and has not been handled by an except clause (or it has occurred in an except or else clause), it is re-raised after the finally clause has been executed. The finally clause is also executed “on the way out” when any other clause of the try statement is left via a break, continue or return statement.

麦新杰翻译:

finally分支总是会被执行,不管异常有没有发生。当异常在try部分发生,但是没有被except分支处理(或者在except或else分支发生),这个异常会在finally分支执行之后,被re-raised。当try部分有break,continue或者return语句时,finally一样会在离开try的时候被执行。

 

Python官方给了一个代码示例,可以用来理解else和finally的不同:

>>> def divide(x, y):
...     try:
...         result = x / y
...     except ZeroDivisionError:
...         print("division by zero!")
...     else:
...         print("result is", result)
...     finally:
...         print("executing finally clause")
...
>>> divide(2, 1)
result is 2.0
executing finally clause
>>> divide(2, 0)
division by zero!
executing finally clause
>>> divide("2", "1")
executing finally clause
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in divide
TypeError: unsupported operand type(s) for /: 'str' and 'str'

本文链接:http://www.maixj.net/ict/python-else-finally-13963
云上小悟 麦新杰(QQ:1093023102)

相关文章

评论是美德

无力满足评论实名制,评论对非实名注册用户关闭,有事QQ:1093023102.


前一篇:
后一篇:

栏目精选


©Copyright 麦新杰 Since 2014 云上小悟独立博客版权所有 备案号:苏ICP备14045477号-1

网站二维码
拍拍贷
go to top