作用:
处理程序异常、抛出异常、友好输出异常
1. 如何捕获异常、处理异常
格式:
try: pass
except ValueError as e: pass
except Exception as e: pass
else: pass
finally: pass
相关注释:
try 包含在try下的所有代码块都会进行异常检测处理 execpt 处理异常 其后面的e(标准故障信息)可以指定也可以不指定 finally 不管是否出现异常都会执行其下面的代码块
具体如下图所示:
2. 异常的种类
上面的故障处理模块只检测了Exception异常类,其实这个故障是所有异常的基类(父类) 无论什么异常都可以用他进行处理,不过在程序中要处理指定异常那么就必须使用相关的派生类(子类)比如:
IndexError 下标错误
KeyError key错误
NameError 名称错误
ValueError 值错误
…
那么如果我定义了NameError 和 ValueError Exception等等这些异常处理标签如果我有一个ValueError的异常该如何进行处理呢?请看下图
异常会从上到下一条条匹配异常处理标签直到匹配到为止 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值错误的异常
了解完上面的两个知识点下面开始了解如何进行定义自己的异常
通过上图我们简单的梳理下:
第一步:定义异常
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 |