该事件会在程序实行进程中爆发,raise    手工业地引发多少个老大

在Python无法正常处理程序时就会发生一个异常,当python检查以程序运行时的错误就引发异常

一、什么是卓殊

老大就是贰个风浪,该事件会在程序实施进程中生出,影响了前后相继的例行推行。
日常景色下,在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语句。

try    捕获由Python或程序本人引发的特别
raise    手工业地引发二个拾壹分
怎么要动用十一分
1、错误管理,当python检查以程序运转时的失实就迷惑那一个,你能够在前后相继里捕捉和处理那些错误,或许忽视它们。
2、事件通报,极度也足以作为某种条件的时限信号,而无需在前后相继里传递结果注解或显式地质度量试它们。
3、特殊情状管理,一时有一点境况是非常少爆发的,把相应的管理代码改为那多少个管理会越来越好有的。
4、奇特的调节流,十分是贰个高等级次序的”goto”,能够把它作为落到实处奇特的调整流的底蕴。如反向追踪等。
那多少个的基础知识
python的try语句有三种风格—一种是管理极度(try/except/else),一种是不管是不是产生特别都将实施最后的代码(try/finally)。
try/except/else风格
try:
    <语句>        #运作别的代码
except <名字>:        
    <语句>        #假若在try部份引发了’name’相当
except <名字>,<数据>:
    <语句>        #如果引发了’name’格外,获得附加的数目
else:
    <语句>        #比如未有非常发生
try的职业原理是,当开始一个try语句后,python就在此时此刻程序的上下文中作标识,那样当至极现身时就足以回到这里,try子句先进行,接下去会产生怎么样依赖于实践时是不是出现分外。
1、如若当try后的说话实施时发生十分,python就跳回到try并实践第贰个门道特出该极度的except子句,卓殊管理达成,调节流就通过全部try语句(除非在管理特别时又掀起新的不胜)。
2、要是在try后的讲话里爆发了那三个,却尚未相配的except子句,分外将被递交到上层的try,或然到程序的最上层(这样将长逝程序,并打字与印刷缺省的失误消息)。
3、假如在try子句实施时未尝发生非常,python将施行else语句后的话语(假使有else的话),然后决定流通过一切try语句。
try/finally风格
try:
    <语句>
finally:
    <语句>    #剥离try时总会实行
raise
python总会奉行finally子句,无论try子句实行时是还是不是发一足够。
1、若无生出分外,python运转try子句,然后是finally子句,然后继续。
2、要是在try子句产生了充足,python就能够再次回到推行finally子句,然后把极其递交给上层try,调整流不会透过全体try语句。
当您想无论是是还是不是发生卓殊都有限支撑奉行某个代码时,try/finally是一蹴而就的。
raise
要掀起那么些,你必要写raise语句,它的花样很轻松,raise前面随着要吸引的极其。
raise <name>    #手工业地引发那贰个
raise <name>,<data>    #传递贰个外加的数据
什么样是足够名(name)呢?它可能是停放效用域内的放手十分(如IndexError),只怕是您程序中的大肆字符串对象。
首先个例子:
缺省表现:彰显错误消息。
$ python test.py
Traceback (innermost last):
  File “test.py”, line 3, in ?
    a = 1 /0
ZeroDivisionError: integer division or modulo
当八个未捕获的不胜发生时,python将去世程序并打字与印刷叁个库房追踪音信,以及极其名和叠合新闻。
用try捕获内置异常
就算你不想在老大发生时结束你的主次,只需在try里捕获它。
#!/usr/bin/python
try:
        a = 1 /0
        print a
except:
        print ‘i get the error’
当程序运转是会捕获七个荒唐并实施except后边的代码。
可怜的惯用法
万分并不三回九转坏事情,举例,文件对象的read方法在文书尾时重回三个空荡荡,python也提供二个内置函数raw_input,它从正式输入流读入。与read方法分裂,当遇到文件尾时,raw_input()引发内置的EOFError错误。所以能够如此用:
while 1:
    try:
        line = raw_input()        #从stdin读入行
    except EOFError:
        break                #在文书末尾退出循环
    esle:
    另外管理代码
用十分传递成功的非实信号
Found = ‘item found’
def search():
    引发或回到Found
try:
    search()
except Found:
    successful
else:
    fail
能够选取try来调解代码,你能够用自已的特别管理替换python缺省的十三分管理。把方方面面程序封装在一个外界try里面,你能够捕获运维时的别样极其。
可怜捕获形式
try语句子句方式表
except:            捕获全体非常
except name:        只捕获特定的非常
except name,value:    捕获非凡和它的附加数据
except (name1,name2):    捕获任何列出的百般
else:            若无极其
finally:        总是实践
抓获多个特别中的贰个,python从上到下地查看except子句,括号里列出几个极其与列出单身的非常是一律的,只是更简美素佳儿(Friso)些。
运行时嵌套的不胜,python会协作近日的except。
finally子句无论怎么着都会施行,所以它是做扫除动作的好地点,如关闭贰个文件的操作。

例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中的语句被打字与印刷出来了。