开发者学堂课程【Python 入门 2020年版:自定义异常】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/639/detail/10418
自定义异常
内容介绍:
一、自定义异常
二、举例讲解
一、自定义异常
系统内置异常分类
除以0的异常 ZeroDivisionError
例如输入1/0,提示0不可以被除
文件不存在的异常 FiLeNotFoundError
例如打开一个不存在的文件 open('xxx.txt'),会提示该文件夹不存在的信息。
多次创建同名的文件夹 FileExistsError
例如输入 os. mkdir('test')并运行后创建了一个文件夹,再次运行之后会提示该文件夹已存在的信息,无法进行再次创建。
值的错误 ValueError
例如输入 int(’hello’),运行后提示无法将 hello 字符串转换成整数。
键的错误 KeyError
例如输入 person ={ 'name ' :' zhangsan '} person[’age' ],运行后系统后会报错,因为 age这个 key并不存在。
语法错误 SyntaxError
这是经常出现的一种错误,尤其对于书写代码不认真的同学。比如在打印时,将 print ( 'hello', 'good' )中的逗号输入成了中文形式,在运行之前就会报错,出现红色波浪线,运行之后会出现 SyntaxError 的提示词。
或者将括号输入成为中文形式等等,在运行之前代码上就已经出现了红色条纹,就是提示语法有错误。还有一些同学在使用 if语句时,经常忘记添加逗号,但此时系统会报错,出现红色条纹,很多情况下同学们对这种提示视而不见,依旧去运行,对此大家应该多加注意,不去犯这种低级错误。
很多同学可能在实际操作过程中也会发现有绿色条纹的提示,例如输入 names = [ ' zhangsan', 'lisi'] ,zhangsan 和 lisi 均会出现绿色波纹,表示系统并不识别该单词,因为我们知道这两个其实是字母拼音,因此系统不会识别,所以这种情况下出现绿色条纹并不需要关注。
而且这种绿色条纹是可以通过设定取消,在 File菜单下进入 Settings,在 Settings界面中搜索 typo,在 Editor 的 Color Scheme 里,将 Effects 效果取消即可。
另外不同颜色所表示的信息我们在 Editor编辑器中的 Color Scheme都可以找到,像黄色条纹表示警告,红色条纹表示 Error,橙色背景表示 Warning,灰色表示 Weak warning,这些警告信息表示代码运行后有可能出错。在遇到红色波浪与橙色背景时需要尤其警惕与重视。
角标错误 IndexError
例如输入 names[5],出现橙色背景提示角标出现了错误。
上面只是对比较典型的几种错误进行了举例说明,其他更多的错误我们可以在系统中进行查看,包括很多类别,例如 BrokenPipeError、ConnectionError、ConnectionRefuseError、DeprecationError、EOFError、FileExistsError、FileNotFoundError、ImportError、keyError、LookupError、MemoryError、NameError、ModuleNotFoundError……对于 ImportError,表示导入模块出现错误。
虽然系统已经提供了很多的错误模式,但是依然不足以达到我们的需求,因此我们可以自定义一些错误模式,下面我们进行一些举例讲解。
二、举例讲解
1、要求
让用户输入用户名和密码,如果用户名和密码的长度在6~12位正确,否则不正确。
2、代码说明
输入密码,并出现提示词
password = input('请输入您的密码:')
if 6<=len(password)<=12:
print('密码正确:')
else:
print(‘密码格式不正确’)
下面表示将密码保存至数据库里
print('将密码保存到数据库')
此时我们输入1232一个不正确的密码格式并运行,发现输出信息提示密码格式不正确,但是同时也会将这个不正确的密码保存至数据库中,这其实并不符合我们的要求,我们只希望保存正确格式的密码,因此我们需要对代码进行修改完善。
对于格式不正确的密码需要进行拦截,使其完成修改之后再进行保存的步骤。
使用 raise关键字抛出一个异常
raise ValueError
输入 hello 一个不正确的密码格式并运行,发现提示信息为 raise ValueError,而且不会再去进行下一步的操作。
需要注意的是此时的事实上,ValueError 是一个大类,我们在抛出 raise 时设定为 raise ValueError(‘密码错误’),当我们再次输入一个格式不正确的密码并运行之后会发现提示信息更改为了密码错误,而且 ValueError 是系统的一个错误,我们也可以自己进行定义一个错误。
自己命名一个错误
class MyError( Exception):
Pass
使用 raise关键字抛出一个异常
raise MyError
注意此处只是对上面抛出内容的修改
自定义错误的好处就是我们可以根据自己的需求进行设定
对自定义错误的名字进行修改并进行参数设定
class LengthError(Exception):
def__init__ (self, x, y):
self.x = x
self.y = y
def__ str__ (self):
return ' 长度必须要在{}至{}之间' .format(self.x, self.y)
password = input('请输入您的密码:')
m=6
n =12
if m <= . len(password) <= n:
print('密码正确:')
else:
raise LengthError(m, n)
此时我们再次输入一个不正确的密码格式并运行,发现输出信息提示密码长度必须要在6至12之间。大家会发现提示词中还会有 main 的字样,表示运行出错所在的文件名。
其实这并没有什么影响,但我们也可以将文件名字样去掉,新建一个 PythonFile,命名为 exception,然后将刚刚自己创建的类的代码复制过来,然后在将其导入到原文件中,这时候再去运行就可以发现刚刚存在的问题就不会出现了。