娃儿学Python(19):异常

一样、什么是殊

生即凡一个事变,该事件会在程序执行过程被生,影响了序的正规尽。
诚如情形下,在Python无法正常处理程序时虽见面发出一个大。
坏是Python对象,表示一个误。
当Python脚本发生很时我们得捕获处理它,否则程序会停止执行。

次、异常处理

捕捉异常可以采用try…except语句。
try…except语句用来检测try语词块被之错,从而让except语句捕获异常信息并处理。
而你不思以异常来时结束你的次,只待以try里捕获它。

语法:
以下也简易的try….except…else的语法

try:
<语句>        #运行别的代码
except <名字>:
<语句>        #如果在try部份引发了'name'异常
except <名字>,<数据>:
<语句>        #如果引发了'name'异常,获得附加的数据
else:
<语句>        #如果没有异常发生

try的做事规律是,当起一个try语句子后,python就当时次的上下文中作标志,这样当好出现经常就是可回到这里,try子句先实行,接下会发出啊依赖让实践时是不是出现异常。

万一当try后的语执行时生很,python就超过回到try并施行第一个门当户对该大的except子句,异常处理完毕,控制流就经过全体try语句(除非在拍卖非常时以抓住新的充分)。

若果在try后底说话里生了好,却并未匹配的except子句,异常将为递交到上层之try,或者到程序的最上层(这样用终止程序,并打印缺省的失误信息)。

要是以try子句执行时尚未出甚,python将执行else语句后底语(如果有else的语),然后决定流通过全try语句。

例1

try:
    fh = open("mytest", "w")
    fh.write("This is a file to test exception!")
except IOError:
    print "Error: No file found or read file error!"
else:
    print "Write cotent to file succeed!"
fh.close()

运行结果:

This is a file to test exception!

翻看mytest文件中的内容:

This is a file to test exception

例2

用mytest文件的状权限去丢

chmod -w mytest

重实施test.py,结果也

Error: 
Error: No file found or read file error!

老三、使用except而未带来任何特别类型

你可以无带任何特别类型使用except

try:
    正常的操作
   ......................
except:
    发生异常,执行这块代码
   ......................
else:
如果没有异常执行这块代码

如上办法try…except语句捕获所有来的那个。但当时不是一个很好之法,我们不可知由此该次识别出实际的不得了信息。因为她擒获所有的挺。

四、try…except…finally语句

finally 中之代码无论是否有大且用为执行

例3:除0异常

try:
    1 / 0
except Exception as e:
    print "0 can not be divided!"
else:
    print "No exception!"
finally:
    print "Anyway, statement in finally block will be executed!"

运行结果:

0 can not be divided!
Anyway, statement in finally block will be executed!

五、raise触发异常

例5

#define function
def test_func( level ):
    if level < 1:
        raise Exception("Invalid level!", level)

try:
    #invoke function
    test_func(0)                
except "any":
    print 1
else:
    print 2
finally:
    print 3

运转结果:

3
Traceback (most recent call last):
  File “test.py”, line 8, in <module>
test_func(0)
  File “test.py”, line 4, in test_func
raise Exception(“Invalid level!”, level)
Exception: (‘Invalid level!’,0)

由运行结果可以视,raise抛来特别后,except和else中之言语都无让打印出,但是finally中之说话为打印出了。