于Python无法正常处理程序时即会生一个要命。为什么而运用好。

同、什么是老

酷即凡是一个事件,该事件会以程序执行过程中出,影响了程序的正规履。
貌似情形下,在Python无法正常处理程序时虽会产生一个生。
异常是Python对象,表示一个不当。
当Python脚本发生甚时我们得捕获处理它,否则程序会停下执行。

“日志”转载:http://www.cnblogs.com/dkblog/archive/2011/08/26/2155018.html

其次、异常处理

捕捉异常可以行使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语句。

“异常”转载:http://www.cnblogs.com/rubylouvre/archive/2011/06/22/2086644.html

例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

图片 1

例2

拿mytest文件的描摹权限去丢

chmod -w mytest

再也实施test.py,结果也

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

2.异常

老三、使用except而休牵动任何特别类型

君可免带来其他异常类型使用except

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

如上办法try…except语句捕获所有来的挺。但迅即不是一个挺好之法子,我们无克由此该次识别出实际的生信息。因为她擒获所有的深。

try
破获由Python或程序本身引发的大

四、try…except…finally语句

finally 中的代码无论是否生很且用让实施

raise
手工地引发一个怪

例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触发异常

  1. 错误处理,当python检查为程序运行时的左就是引发那个,你得以次里捕捉和拍卖这些不当,或者忽视她。
  2. 事件通报,异常与否可作为某种条件的信号,而未需要在程序里传递结果表明或显式地测试其。
  3. 出奇情况处理,有时略情况是雅少来的,把相应的处理代码改呢好处理会更好有的。
  4. 蹊跷的控制流,异常是一个胜似层次之”goto”,可以将其当作贯彻奇特的控制流的根基。如反为跟踪等。

例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中之言语为打印出来了。

深的基础知识

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子句执行时是不是犯一样格外。

  • 倘无生大,python运行try子句,然后是finally子句,然后继续。
  • 一经以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子句,括号里排有多独十分以及列有单身的大是千篇一律的,只是重新简短一些。

运作时嵌套的酷,python会配合最近的except。

finally子句无论如何都见面执行,所以它是举行扫除动作之好地方,如关闭一个文书的操作。

捕捉所有大

try:
   # 你的代码
except BaseException, e:
   print(str(e))

总结:写日记与那个在描绘代码时凡一个要命好的习惯,有助于你以编排好类别或者逻辑复杂的工程时追寻来问题!

 

相关文章