python--异常处理-主动引发异常-自定义异常类

一.主动引发异常
并非只有在程序运行出错时才可以引发异常,python允许在代码中使用raise或assert语句主动引发异常。
1.raise语句
1.1基本格式:

raise 异常类名                         #创建异常类的实例对象,并引发异常
raise 异常类实例对象                    #引发异常类实例对象对应的异常
raise         			       #重新引发刚刚发生的异常

Python执行raise语句时,会引发异常并传递异常类的实例对象。

1.2.1用类名引发异常
raise语句中指定异常类名时,创建该类的实例对象,然后引发异常。

raise IndexError                    #引发异常

1.2.2用异常类实例对象引发异常
可以直接使用异常类实例对象来引发异常。

x =  IndexError()                #创建异常类的对象
raise x                          #引发异常

1.2.3传递异常
不带参数的raise 语句可再次引发刚刚发生过的异常,其作用就是向外界传递异常。

try:
		raise  IndexError          #引发 IndexError  异常
except:
		print("出错")			
		raise			#再次引发 IndexError  异常

1.2.4指定异常信息
在使用raise语句引发异常时,可以为异常类指定描述信息。
1.3异常链:异常引发异常
可以使用raise…from…语句,使用异常来引发另一个异常。
2.assert语句
2.1基本格式:

assert 测试表达式,data

assert语句在“测试表达式”的值为假时,引发AssertionError异常,data作为异常描述信息。

二.自定义异常类
自定义异常类可以提供常规异常处理之外的自定义操作。
异常类的超类:
所有的异常类都有共同的超类:BaseException和Exception
1.1BaseException类
BaseException类是所有异常类的顶级超类。不能直接继承BaseException类来定义自己的异常类。BaseException类唯一的子类就是Exception类。BaseException类为子类提供了默认的打印和状态保持行为。
在创建异常类实例对象时,可以用一个字符串作为异常描述信息。在打印时,显示异常信息描述。
实际上,在创建异常类实例对象时,可以提供多个参数。如果子类没有覆盖继承自己BaseException类的构造方法,所有的参数均会以元组的形式保持在args属性中。
1.2Exception类
Exception类是其他所有python内置异常类的超类,除了GeneratorExit、KeyboardInterrupt和SystemExit。
在使用try语句处理异常时,可指定捕捉Exception异常,而不是空的except。这样可以更明确的捕捉异常,并通过异常实例对象来获得更多信息。
2.创建自定义异常
如果需要在程序中使用raise语句引发自定义的异常,则可使用Exception类或其他内置的预定义异常类型作为超类来定义自己的异常类。

class test(Exception):pass		#定义一个空的异常类,超类为Exception
raise test(" ")		#引发自定义异常
class test(IndexError):pass 		#定义一个空的异常类,超类为IndexError
raise test(" ")  #引发自定义异常

你可能感兴趣的:(笔记)