• XX学Python·异常处理


    • 使用try和except可捕获异常,即在出现异常后不会将代码终止运行,而是执行except中的代码处理异常
    '''
    格式:
    try:
        可能出现异常的代码
    except:
        如果出现了异常,就执行其中的代码
    '''
    # 需求:读取文件,如果文件不存在,则以写入方式打开
    # 若try中代码出现异常,则执行except中的命令,try中的代码无异常,则不会执行
    try:
        file = open('test.py', 'r')
    except:
        file = open('test.py', 'w')
    # 正常的Python开发中基本每个函数中都要出现一次异常捕获。代码健壮性:代码抵御异常的能力
    
    • 捕获指定类型的异常
      • 在except后边添加异常类型,就可捕获指定类型的异常
      • 如果想要捕获多种异常
        • 在except后添加多个异常类型,用逗号隔开,用括号包裹变成一个元组
        • 或可书写多个except
      • 如所有异常类型都无法捕获到该异常,或要捕获未知类型的异常,可使用Exception
      • 在异常类型后添加as变量名,变量就是异常对象,打印该对象就可以出现错误信息
      • try嵌套,如果里面的try没有捕获到这个异常,那外面的try会接收到这个异常,然后进行处理,如果外边的try依然没有捕获到,那么再进行传递。
    # Exception是所有异常类的父类,可捕获所有异常类型
    try:
        print('2' + 1)
        print(a)
        print(1 / 0)
    except (ZeroDivisionError, NameError) as error:
        print('出现异常!', error)
    except Exception as e:  # 要捕获未知类型异常使用Exception
        print('出现未知异常', e)
    
    • else 和 finally
      • else: try中控制的代码没有出现异常,则执行该结构内的代码
      • finally:无论出现什么情况都会执行finally里边的代码,哪怕程序崩溃
    '''
    格式:
    try:
        可能会出现异常的代码
    except:
        在出现异常后执行该命令处理异常
    else:
        当没有出现异常时,执行该代码
    '''
    try:
        a = 1
        print(a)
    except:
        print('出现异常了')
    else:
        # try中的代码正常执行没有任何异常,则执行else里边的代码
        print('没有异常,虚惊一场')
    
    '''
    try:
        可能出现异常的代码
    except:
        代码出现异常后执行该代码处理异常
    else:
        如果try中的代码不出现异常,则执行其中的代码
    finally:
        无论如何都会执行finally中的代码
    '''
    
    # 无论任何情况,finally中的代码都要被执行
    try:
        a = 1
        print(a)
        print(1/0)
    except NameError:
        print('出现异常了')
    else:
        print('没有出现异常')
    finally:
        print('出现不出现异常都要执行')
    # 代码写到finally中,哪怕程序报错终止,代码依旧要执行完成
    # 但写到try结构外,程序报错终止将不会继续执行外部代码
    print('try结构之外书写内容')
    
    • 自定义异常抛出
      • 自定义异常一定要继承自Exception
      • 自定义异常可以使用raise抛出,可以进行捕获或者导致程序终止
      • raise可以抛出系统异常,也可以抛出自定义异常
    # 在自定义异常时,只要继承自Exception就可以当做异常抛出
    # 继承后要重写Exception方法,添加我们需要的内容
    
    class PassWorldError(Exception):
        error_count = 0
    
        def __init__(self, str):
            super().__init__(str)
            # 在此处可以添加自定义操作
            PassWorldError.error_count += 1
    
    # raise可以手动抛出异常,抛出异常后,可以直接终止程序,或使用try except进行捕获
    # raise可以抛出自定义异常,也可以抛出系统异常
    try:
        password = input('请输入您的密码:')
        if len(password) < 6:
            raise PassWorldError('您的密码不足6位,请重新输入')
            # raise NameError('您的密码错误了')
    except PassWorldError as error:
        print(error)
    
    # raise PassWorldError('密码错误')
    
  • 相关阅读:
    python 协程
    python中基于descriptor的一些概念
    python remove del pop 的区别
    python 装饰器 和面向切面编程(AOP)
    python yield详解
    Python的列表推导式,字典推导式,集合推导式使用方法
    python 垃圾回收机制
    (5) etcd 介绍、经典适用场景、安装、配置、测试
    grafana 安装配置
    open-falcon 安装配置
  • 原文地址:https://www.cnblogs.com/portb/p/16754766.html
Copyright © 2020-2023  润新知