异常处理
异常概念
异常是程序执行过程中出现的非正常流程现象
异常是无法避免的,只能先预估出可能出现的异常现象,并提供对应的处理机制,在异常出现后保障程序不被中断执行
异常处理基本语法
格式一(常用):
try:
可能引发异常现象的代码
except:
出现异常现象的处理代码
格式二(不常用):
try:
可能引发异常现象的代码
finally:
try代码块结束后运行的代码
格式三(完整格式):
try:
可能引发异常现象的代码
except:
出现异常现象的处理代码
else:
未出现异常现象的处理代码
finally:
try代码块结束后运行的代码
各代码块功能与执行说明:
名称 |
作用 |
说明 |
try |
包裹可能引发异常的代码 |
被包裹的代码有可能出现异常也有可能不出现异常 |
except |
对出现的异常进行处理 |
异常处理代码块可以有多个,根据不同种类的异常定义不同的处理方案 |
else |
未出现异常的执行代码 |
当try代码块中没有出现异常时,try中代码执行完毕执行else中的代码 |
finally |
异常处理机制结束执行代码 |
无论try代码块中是否出现异常现象,都将执行finally代码块中的内容 |
异常精细化处理
异常处理可以根据不同种类的异常进行不同的处理方案设计,使用异常名称来进行区分。标准格式如下:
except 异常类名1 as 变量名:
出现异常现象的处理代码
except 异常类名2 as 变量名:
出现异常现象的处理代码
except 异常类名3 as 变量名:
出现异常现象的处理代码
except Exception as 变量名:
出现异常现象的处理代码
说明
1.通过异常类名后面的变量名可以获取到具体异常信息
2.执行了某个except中的内容后,其他except中的内容将不再执行
3.Exception类是所有异常类的父类,能够拦截所有的异常现象,通常设置成最后一级的捕获
异常对象主动抛出
异常现象可以使用主动抛出的形式来构造,语法格式如下:
raise 异常类对象
注意:异常对象使用raise抛出时,通常是满足某种情况时抛出,否则将会出现程序执行到此处必定抛出异常。
异常处理传递
异常出现后如果没有被捕获处理,该异常将会继续向下传递,到下一次 调用位置。
情况一:使用try嵌套继续处理
情况二:函数/方法间调用,在任意调用位置处理,最后调用处理 中间调用处理
自定义异常
自定义异常基本语法
class 自定义异常类名(Exception):
pass
自定义异常主动触发
raise 异常类对象
1 class NameQuestion(Exception): 2 pass 3 class PasswordQuestion(Exception): 4 pass 5 6 def check_login(name,pwd): 7 """检测用户名和密码是否合理""" 8 if len(name) <3 or len(name) > 8: 9 raise NameQuestion("用户名长度必须在3到8个字符之间") 10 if not name.isalnum(): 11 raise NameQuestion("用户名中必须使用英文字母和数字组成") 12 if len(pwd) != 6: 13 raise PasswordQuestion("密码长度必须是6位") 14 if not pwd.isnumeric(): 15 raise PasswordQuestion("密码必须由纯数字组成") 16 17 name = input("请输入用户名:") 18 pwd = input("请输入密码:") 19 20 try: 21 check_login(name,pwd) 22 except NameQuestion as e: 23 print(str(e)) 24 except PasswordQuestion as e: 25 print(str(e)) 26 else: 27 print("正常登陆,请使用")