python回顾(十三)——异常处理

异常处理

异常概念

  异常是程序执行过程中出现的非正常流程现象

  异常是无法避免的,只能先预估出可能出现的异常现象,并提供对应的处理机制,在异常出现后保障程序不被中断执行

 

异常处理基本语法

  格式一(常用):

  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("正常登陆,请使用")
原文地址:https://www.cnblogs.com/sickle/p/10123495.html