python:异常处理/相关概念/异常处理

ernestwang 877 0

相关概念

  • 错误:程序运行之前的语法问题。如:关键字、缩进不齐、符号不成对等
  • 异常:程序运行过程中出现的问题。如:除数为0、下标越界、访问不存在的属性等

异常处理

  • 说明:
    • 异常处理就是在程序出现异常时进行人为的干预
    • 可以认为是一种特殊的流程控制语句
    • 提高代码的健壮性
  • 基本语法:
    try:
        print('正常执行')
        # a = 10 / 0
        print([1, 2, 3][3])
        print('运行结束')
    except Exception as e:
        # 在这里捕获异常,然后进行处理
        print('出现异常', e)
    
    print('OVER')
  • 多异常处理
    '''
    # 每种异常都有特定的不同的处理方式
    try:
        # print(a)
        # print(10 / 0)
        print([][3])
    except NameError as e:
        print('NameError', e)
    except ZeroDivisionError as e:
        print('ZeroDivisionError', e)
    except Exception as e:
        print('OtherError', e)
    '''
    
    # 多个异常有相同的处理方案,可以采用分组的方式
    try:
        # print(a)
        print(10/0)
    except (NameError, ZeroDivisionError) as e:
        # 分组处理异常
        print('NameError or ZeroDivisionError')
    except:
        # 当不需要异常信息时,可以不写异常类名及对象名称
        print('OtherError')
  • 完整异常处理
    try:
        print('正常执行')
        print(a)
    except Exception as e:
        # 出现对应异常时执行
        print('出现异常:', e)
    else:
        print('没有出现异常时执行')
    finally:
        print('无论有无异常都执行')
  • 手动抛出异常
    try:
        print('出现逻辑问题')
        # 创建一个异常对象,然后使用raise关键字抛出
        raise Exception('手动抛出的异常')
    except Exception as e:
        print('出现异常:', e)
    
    print('OVER')
  • 异常嵌套
    print('我要去上班,什么也阻止不了我上班的脚步')
    
    try:
        print('我准备骑车去上班')
        raise Exception('不指定哪个粗心的家伙把我充电器弄掉了')
        print('骑车提前到达公司')
    except Exception as e:
        print('电车故障:', e)
        try:
            print('于是准备坐公交去上班')
            raise Exception('等了15分钟一直没有公交')
            print('坐公交准时到达公司')
        except Exception as e:
            print('公交异常:', e)
            print('于是我准备打车去上班')
            print('打车还是快,提前到达公司')
    
    print('热情满满的开始一天的工作')
  • 自定义异常类
    import time
    
    # 自定义异常类
    class MyException(Exception):
        def __init__(self, msg):
            self.msg = msg
    
        def __str__(self):
            return self.msg
    
        # 异常处理函数
        def deal(self):
            print('异常处理中...')
            time.sleep(1)
            print('异常处理完毕')
            
    try:
        print('正常运行')
        raise MyException('请求参数有误')
    except MyException as e:
        # 一定要放在系统异常之前,否则将不会捕获异常
        print('自定义异常:', e)
        e.deal() 
    except Exception as e:
        # Exception是其他异常的父类,必须放在最后
        print('其他异常', e)
        print('处理其他异常') 
        
    print('OVER')    
  • 特定场景应用
    • 说明:特定场景指某个操作的环境,即上下文,如:文件上下文,最后一定要进行关闭操作。
    • with:针对有上下文的情况,可以使用with来确保操作结束时上下文的关闭操作。
    • 示例:
    '''
    # 在文件读写的上下文中,无论是否有异常,结束后都需要进行文件关闭操作
    fp = open()
    # 文件读写
    fp.close()
    '''
    
    '''
    with open('xx') as fp:
        pass
        # 这里就是文件操作的上写文
        # with语句结束时会自动执行关闭操作,不需要fp.close()
        # 也无论操作过程是否出现异常
    '''
    
    class Person:
        def __init__(self):
            print('__init__')
    
        # 进入上下文时执行
        def __enter__(self):
            print('__enter__')
    
        # 退出上下文时执行
        def __exit__(self, exc_type, exc_val, exc_tb):
            print('__exit__')
            print('异常类型', exc_type)
            print('异常信息', exc_val)
            print('异常追溯', exc_tb)
            
    with Person() as p:
        print('正常执行中')
        raise Exception('出现异常')   

标签: 异常处理 python

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~

复制成功
微信号: irenyuwang
关注微信公众号,站长免费提供流量增长方案。
我知道了