Python异常

异常引发或会被传递给异常处理器,当前没有找到异常处理器,就会向上找直到找到为止,找到最顶层还是没找着的时候就会出错。

异常可以通过try语句来检测,任何在try语句块里的代码都会被监测,检查有无异常发生。

一、try-except

try:

   try_suite   #监控这里的异常

except Exception[,reason]:          #reason作为代码异常的诊断信息,作为一个错误类的实例,通常用e表示

   except_suit   #异常处理代码

-----------------

try:

   f=open('blah','r')

except IOError,e:    #IOError一般为打开文件输入输出错误。若没有遇到错误,则解释器会忽略except语句继续执行

   print 'could not open file:',e      #一旦遇到IOError和e之后的处理方式,try下面的没有执行的剩余语句将被忽略

这里的语句只能处理IOError类型的错误,其他类型的不会处理,当遇到这个错误时,就会马上转向处理器中的代码,若找不到处理器那么异常就会向上移交给调用者,一直向上直到找到对应的处理器,否则就会报错

try:

   xxx

except (ValueError,TypeError):   #所有异常类型可以放在一个元祖里,进行统一处理

   xxx

--------------------------

try:

  xxxx

except ValueError:

   xxx

except TypeError:

   xxx

-----------------

try:

   xxx

except Exception,e:      #Exception是错误类里最顶层的类,其他例如TypeError等错误都是顶层之下的,所有Exception可以代表绝大多数错误类型,e属于错误日志

   xxx

--------------

二、try-finally

当在try范围中产生一个异常时,会立即跳转到finally语句块,当finally中的所有代码都执行完毕后,会继续想上一层引发异常。

三、try-except-finally

try: 

   A

except MyException:B

else: C

finally:D

程序执行ACD或ABD

四、try-except-else

在try中的语句全部执行完后,没有引发异常,而走else语句

----------------------------------------------

try:

   try_suite

except Exception1:

   suite

except(Exception2,exception3):

   suite

except Exception5,argument5:

   suite

except (Exception6,Exception7),argument67:

   suite

except:

   suite

finally:

   suite

 

with语句

with context_expr[as var]:

   with_suite

with open('/etc/passwd','r') as f:

   for eachLine in f:

      #do sutff with eachline or f...

 

raise语句

raise [someException[,args[,traceback]]]

SomeException是触发异常的名字,它必须是一个字符串,类或实例。

args是参数、值,用来传给异常,通常是元祖形式

traceback追踪对象,如果没有就填写None

posted @ 2017-11-20 15:10  eudaemonia  阅读(155)  评论(0编辑  收藏  举报