zoukankan      html  css  js  c++  java
  • 异常处理

    一、什么是异常

        异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止)

    二、异常的分类

      1、语法检测异常  
          解释器在执行程序时,首先检测语法,如果发现有问题,则一行代码都不会执行
      2、运行时异常
          已经通过语法检测,开始执行代码,但是逻辑有问题

    print(123)
    b
    
    
    
    print(123)           检测到语法异常,不会打印123
    if    
    语法异常与运行异常

    三、学习的主要目的:

      在异常发生时不中断程序,提高程序的健壮性

    四、异常的种类

    AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
    IOError 输入/输出异常;基本上是无法打开文件
    ImportError 无法引入模块或包;基本上是路径问题或名称错误
    IndentationError 语法错误(的子类) ;代码没有正确对齐
    IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
    KeyError 试图访问字典里不存在的键
    KeyboardInterrupt Ctrl+C被按下
    NameError 使用一个还未被赋予对象的变量
    SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
    TypeError 传入对象类型与要求的不符合
    UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
    导致你以为正在访问它
    ValueError 传入一个调用者不期望的值,即使值的类型是正确的

    五、异常的组成

      

      

    六、处理异常的基本语法:

     

     语法1  单/多分支  
    
        try:
    
          代码
    
        except type1:
    
        except type2:
    try:
        print("=======1")
        print("=======2")
        print("=======3")
        l = [1,2,3]
        l[100]                            # 发现IndexError,下面代码不再执行
        print("======4")
        d = {'a':1,'b':2}
        d['c']
        print("======5")
    except IndexError:
        print("=======6")
    print("=======8")
    
    -----------------------------------------------------------
    
    =======1
    =======2
    =======3
    =======6
    =======8
    
    
    二
    如果此时是except Keyerror:
    =======1
    =======2
    =======3
    View Code
     语法2  多异常合并处理
        try:
        except  (type1, type2, ....):
    
    
      语法4  多分支 + 万能异常
        try: 
        except  type1: 
        except  type2: 
        except  Exception  as  别名:
    
    
      语法5  try+ else
        try: 
        except  type:
        else:                  #else必须放到后边,会在没有异常的情况下执行
    
    
      语法6  try+finally
        try:
          #f = open(“a.txt”,...)     
    except type:     finally: #无论异常是否发生,finally后的代码都会执行,一般用于资源回收
          #f.close()

       

    万能异常(不建议使用)

    try:
        li[1]
        dic['age']
    方式一except:
    方式二except Exception:  #只执行一个except,只要发现错误,下边的将不会执行
    方式三except BaseException:
        print('索引不对')
    万能异常

     七、主动抛出异常raise

    raise +异常类型(“给出信息”)
    
    raise TypeError("异常信息")

    使用场景:需要给用户反馈信息时,比如注册登录,用户名输入数字时,抛出异常,反馈信息

    一般与自定义异常连用

     八、自定义异常类

      当系统内置的异常类型无法准确的描述你的错误原因时,继承BaseException

    lass MyException(Exception):
        def __init__(self,msg):
            super().__init__()
            self.msg = msg
    
        def __str__(self):             #__str__
            return "%s" %self.msg
    
    raise MyException("自定义的")

    九、断言assert

    assert 条件

  • 相关阅读:
    第四周PLECS仿真
    三相异步电动机预习笔记
    第三周PLECS仿真
    《自动化技术中的进给电气传动》 1.3节及《控制系统设计指南》 第一,二章设计指南读书笔记
    第二周 PLECS仿真
    机电传动课程学习
    《实时控制软件设计》2017年度教学总结
    《实时控制软件设计》2017年教学内容
    《机电传动控制》(2017)综合作业
    《机电传动控制》(2017)第十一周作业
  • 原文地址:https://www.cnblogs.com/pdun/p/10416768.html
Copyright © 2011-2022 走看看