zoukankan      html  css  js  c++  java
  • 10 异常

    异常

    • 为了是程序更具健壮性,在程序中遇到的可能出现的错误都要尽量被解决。对可能出现错误的代码进行处理,就是异常处理。
    • 一段代码,如果遇到异常,没有得到处理,则整个程序就会停止下来,如果进行处理,则程序往下运行。

    简单的异常处理,try-except:

    格式如:

    try:
        # 尝试捕获异常的代码(可能会出错的代码)
    except:
        # 出现异常后要执行的代码
    

      

    异常捕获的完整语法:

    在实际开发中,一段代码可能会遇到不同的错误,则针对不同的错误有不同的处理方法,这时需要如下格式处理:

    try:
        # 尝试捕获异常的代码(可能会出错的代码)
    except 错误类型1:
        # 出现错误类型1后要执行的代码
    except (错误类型1,错误类型2):
        # 出现错误类型1和2后要执行的代码
    except Exception as result:
        # 出现其它错误类型后要执行的代码(通常是告知未知错误)
    else:
      #没有异常才会执行的代码
      pass
    finally:
      #无论是否有异常,都要执行的代码

      

    异常的传递性

    程序中,如果异常没有得到处理,则会向上传递,如果一直传递到主程序还没有得到处理,则程序终止,如:

    1 # 异常会向上传递直到主程序
    2 class A:
    3     def demo1(self):
    4         return int(input("请输入一个整数"))
    5     def demo2(self):
    6         return demo1()
    7 
    8 a = A()
    9 a.demo2()

      运行结果,可以看到错误从第6行传递到调用它的第9行,仍没得到解决,于是报错:

    E:python3python3.exe F:/PycharmProjects/project3-class/xh_23_异常传递.py
    Traceback (most recent call last):
      File "F:/PycharmProjects/project3-class/xh_23_异常传递.py", line 9, in <module>
        a.demo2()
      File "F:/PycharmProjects/project3-class/xh_23_异常传递.py", line 6, in demo2
        return demo1()
    NameError: name 'demo1' is not defined
    

      

    利用异常的传递性,可以直接在主程序处理异常,而不用在各个方法中处理,减少代码的复杂性。

    主动抛出异常

    在开发中,有时我们需要主动抛出一些,符合程序运行,但不符合需求设定的异常。

    抛出异常和捕获异常是两个不同的概念。抛出异常并不代表处理好异常了,它只是把异常抛出去了而已,还需要捕获处理。

    例如:如果用户输入的密码少于8位,则提示异常,并进行处理。

    思路:

    • 创建一个Exception对象
    • 使用raise关键字抛出该异常(该Exception对象)

    格式:自定义异常名 = Exception(“提示字符串”)  #括号中除了传递字符串,还可以传递其它参数,但是现在我还不知道能传啥

    raise 自定义异常名 #主动抛出此异常

    举个例子,输入一段字符串,如果字符串长度小于8则抛出异常:

    def input_passwd():
        a = input("请输入密码:")
        if len(a) > 8:
            return a
        yc = Exception("密码长度不够") #实例化一个异常对象起名yc,并初始化提示信息“密码长度不够”
        raise yc1 #主动抛出异常
    input_passwd()
    

      此时执行此程序,若输入一个长度小于8的字符串,则报错:

    Traceback (most recent call last):
      File "F:/PycharmProjects/project3-class/xh_24_主动抛出异常.py", line 7, in <module>
        input_passwd()
      File "F:/PycharmProjects/project3-class/xh_24_主动抛出异常.py", line 6, in input_passwd
        raise yc1
    Exception: 密码长度不够
    

      主动抛出的异常同样需要对其进行处理,不然报错并终止程序。

  • 相关阅读:
    c++ primer 中讲的顶层const 和 底层 const 理解
    github 0 学习
    MySQL 0 学习
    c++11 move构造函数和move operator 函数 学习
    c++11 多线程 1
    c++ 多线程 0
    学习 emplace_back() 和 push_back 的区别 emplace_back效率高
    crontab执行脚本失败问题
    lucene 排序
    maven 内置变量
  • 原文地址:https://www.cnblogs.com/Scorpicat/p/11725468.html
Copyright © 2011-2022 走看看