Python try…except 异常处理模块

作用:

处理程序异常、抛出异常、友好输出异常

1. 如何捕获异常、处理异常

格式:

try:
     pass
except
ValueError as e:
     pass
except
Exception as e:
     pass
else
:
     pass
finally
:
     pass

相关注释:

try 包含在try下的所有代码块都会进行异常检测处理
execpt 处理异常 其后面的e(标准故障信息)可以指定也可以不指定
finally 不管是否出现异常都会执行其下面的代码块

具体如下图所示:

clip_image002

2. 异常的种类

上面的故障处理模块只检测了Exception异常类,其实这个故障是所有异常的基类(父类) 无论什么异常都可以用他进行处理,不过在程序中要处理指定异常那么就必须使用相关的派生类(子类)比如:

IndexError 下标错误

KeyError key错误

NameError 名称错误

ValueError 值错误

那么如果我定义了NameError 和 ValueError Exception等等这些异常处理标签如果我有一个ValueError的异常该如何进行处理呢?请看下图

clip_image004

异常会从上到下一条条匹配异常处理标签直到匹配到为止 ExceptError在正常情况下放在异常处理程序的最末端 来处理未知异常,如果有些异常需要特殊操作为,放在“except ExceptError”的上面。

3. 自定义异常

了解自定义异常之前 首先需要理解两个概念:

1. 类中的方法__str__(self) 执行类的时候会返回其中的内容 用于输出异常信息

例如:

#定义Alan_class类
class Alan_class(Exception):
    #定义__str__方法
     def __str__(self):
       #指定输出信息
         return 'Alan Error'
#执行类Alan_class
print Alan_class()

输出结果为:

Alan Error

2. raise 抛出异常

比如 执行 raise ValueError() 那么就会抛出一个 ValueError值错误的异常

了解完上面的两个知识点下面开始了解如何进行定义自己的异常

clip_image006
通过上图我们简单的梳理下:
第一步:定义异常
 
class 异常名称 (Exception):
      def __init__(self,msg)
            self.message=msg
      def __str__(self):  //定义__str__函数处理异常
            判断是否输入了自定义的异常信息
            if 输入了:
                return ‘自定义异常信息’
            else:
                rerun ‘默认异常信息’
第二步:抛出并处理异常
 
raise 异常名称(‘自定义异常信息’) //触发异常
except 异常名称,异常信息
      print 异常信息
 

4. assert 断言

如果assert断言的条件为假,则抛出异常AssertError,等同于 判断+raise

try:
    #如果两个字符串不相等则为假抛出异常
     assert 'Lisa' == 'Alan'
#except处理异常
except Exception:
     print 'name not same'

执行结果:

name not same

posted on 2015-12-18 11:34  Alanpy  阅读(7317)  评论(0编辑  收藏  举报

导航