使用Python提供的raise语句主动抛出异常
使用raise语句主动抛出异常的意思是开发者可以自己制造程序异常,这里的程序异常不是指发生了内存溢出、列表越界访问等系统异常,而是指程序在执行过程中,发生了用户输入的数据与要求数据不符、用户操作错误等问题,这些问题都需要程序进行处理并给出相应的提示。处理这些问题多使用判断语句,在判断语句体内进行相应的问题处理,如果处理问题的语句过多,就会导致代码复杂化,代码结构不够清晰。在这种情况下,可以使用raise语句主动抛出异常,由异常处理语句块进行处理。
上面的案例代码用于判断用户输入的登录账号和密码是否正确,当用户输入错误的密码和账号时,显示输入错误信息。案例代码把显示错误信息的语句放置在except语句块中,异常由raise语句抛出。上面的案例代码很简单,提示信息完全可以放置在if语句块内,把提示信息放置在except语句块内,主要是为了说明raise语句的用法。
raise语句的一般用法是:
raise [someException [, args [, traceback]]]
第一个参数someException是触发异常的名称,异常名称是Python提供的标准异常中的任何一种;第二个参数args是可选的,args可以是一个元组,也可以是单独的字符串。大多数情况下,单一的字符串用来指示错误发生的原因。如果传的是元组,通常的组成是一个错误字符串、一个错误编号、一个处理错误的函数地址等;第三个参数是一个traceback对象,它也是可选的,实际上这个参数很少使用,主要是用于跟踪错误记录。
使用raise语句可以主动抛出异常,用于处理因一些因用户错误操作和输入而产生的问题。Python提供的标准异常有可能不满足程序一些特定的异常处理需求。例如用户操作和输入错误的一些异常。在这种情况下,可以创建自己的异常。
新创建的异常需要继承于标准异常的基类或子类,这里可能会涉及到类的概念,关于类的概念,我们会在后面的章节予以介绍。下面是一个新建异常的例子。
上面的代码新建了一个CustomError异常类,CustomError异常类继承于Python标准异常的Exception类。在下面的代码中,我们修改前面用户登录判断的案例代码,并使用自己新建的CustomError异常来处理问题。