• 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("正常登陆,请使用")
  • 相关阅读:
    .Net下RabbitMQ的使用(1) 初识RabbitMQ
    Android GridView用法,用到了BaseAdapter
    android 代码布局简单的例子
    ActivityGroup的简单用法(1)详细讲解
    devc++中编译含WINSOCK的代码出现错误的解决方法
    Qt源码分析之QPointer
    QML基础——初识Qt Quick Designer
    Qt源码分析之信号和槽机制
    QML基础——UI布局管理
    Qt源码分析之QObject
  • 原文地址:https://www.cnblogs.com/sickle/p/10123495.html
Copyright © 2020-2023  润新知