• Python中的异常处理


    什么是异常???

        程序在运行过程中出现了不可预知的错误
        并且该错误没有对应的处理机制,那么就会以异常的形式表现出来
        造成的影响就是整个程序无法再正常运行

    异常的种类

      1. 语法错误:是你程序立刻就能解决的

      2. 逻辑错误:一眼看不出来,是程序启动以后出现的

            针对逻辑上的错误,可以采用异常处理机制进行捕获

    常见的错误类型:

       NameError      名字错误
           SyntaxError     语法错误
           KeyError          键不存在
           ValueError       值错误
           IndexError       索引错误

    异常的结构:

      1. 异常的类型:如:NameError     

      2. 异常的信息:如:name 'fdsdfsdf' is not defined

      3. 异常的位置:如:Traceback (most recent call last):
                    File "D:/python脱产10期视频/day29/01 异常处理.py", line 1, in <module>
                       fdsdfsdf

    那么针对这些异常该如何避免呢????

    # 简易模式
    
    try:
        # 代码块
        name  # 会出现NameError错误,名字未被定义
    except NameError:  # 捕获NameError错误
        ...  # 接下来要执行的代码块
    
    try: i = [1, 2, 3] i[4] # 会出现IndexError错误,索引值超出范围 except IndexError: ... # 接下来要执行的代码块
    try: d = {'name':'jason'} d['age'] # 会出现KeyError错误,键错误 ---所以推荐字典取值时候用get,没有键的时候返回None,不会报错 except KeyError: ... # 接下来要执行的代码块

    # 此外,还可以将上述合并在一起
    
    try:
        name
        
        i = [1, 2, 3]
        i[4]
        
        d = {'name':'jason'}
        d['age']
    except Exception/BaseException:  # 万能异常,所有的异常类型都能捕获
        ...  # 接下来要执行的代码块

     补充:

    try:
        name
        
        i = [1,2,3]
        i[5]
        
        d = {'name':'zhao'}
        d['age']
        
    except Exception:
        ...
    else:
        ...  # 被检测代码没有任何异常发生,才会走else     必须在except后面
    finally:
        ...  # 无论被检测的代码是否有异常发生,都会在代码运行完毕之后执行
    # 主动抛异常
    # 关键词 raise
    a = 3
    if a == 1:
        pass
    else:
        raise TypeError('a must be 1')
    
     Traceback (most recent call last):
       File "D:/代码练习/8.8/异常处理.py", line 56, in <module>
            raise TypeError('a must be 1')
     TypeError: a must be 1
    # 断言
    # 关键字:assert
    i = 90
    assert i < 100  # 断言i小于100,猜对了不影响代码执行,正常往下走;但是猜错了直接报错
    print('哈哈,我猜对了!')  # 哈哈,我猜对了!
    # 自定义异常
    
    class MyError(BaseException):  # 需要继承BaseException
        def __init__(self):
            super().__init__()
    
        def __str__(self):
            # return '<我自己定义的错误信息提示...>'
            return '< a 必须为 1 >'
    
    # 如:
    a = 3
    if a == 1:
        pass
    else:
        raise MyError  # __main__.MyError: < a 必须为 1 >
    
    # raise MyError('我自己定义的异常') 主动抛出异常起始就是将异常类的对象打印出来,会执行__str__方法
    
    
  • 相关阅读:
    不错的计算机免费电子书网站
    十点提高编程技巧
    delphi 通过TStyleManager设置主题类型
    delphi 简体和繁体字符串转换
    delphi unidac 连接mysql
    Delphi 的字符及字符串 string、AnsiString、WideString、String[n]、ShortString
    delphi format格式
    AnsiString和WideString 区别
    企业级Docker私有仓库部署(https)
    企业级Docker私有仓库之Harbor部署(http)
  • 原文地址:https://www.cnblogs.com/pupy/p/11321499.html
Copyright © 2020-2023  润新知