• 异常处理


    程序中难免出现错误,而错误分成两种

    1.语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正)

    #语法错误示范一
    if
    
    #语法错误示范二
    def test:
        pass
    
    #语法错误示范三
    print(haha
    
    语法错误

    2.逻辑错误(逻辑错误)

    #用户输入不完整(比如输入为空)或者输入非法(输入不是数字)
    num=input(">>: ")
    int(num)
    
    #无法完成计算
    res1=1/0
    res2=1+'str'
    
    逻辑错误
    # 什么是异常?异常和错误的区别
    # Error 语法错误 比较明显的错误 在编译代码阶段就能检测出来
    # Iteration 异常 在执行代码的过程中引发的异常
    # 异常发生之后的效果
    # 一旦在程序中发生异常,程序就不再继续执行了
    如何看报错信息
    异常就是程序运行时发生错误的信号,在python中,错误触发的异常如下



    最简单的异常处理
    l = ['登录','注册','退出']
    for i in enumerate(l,1):
        print(i[0],i[1])
    try:
        num = int(input('num :'))
        print(l[num-1])
    except IndexError:
        print('请输入一个数字')
    
    多分支异常处理
    l = ['登录','注册','退出']
    for i in enumerate(l,1):
        print(i[0],i[1])
    try:
        num = int(input('num :'))
        print(l[num-1])
    except ValueError:
        print('请输入一个数字')
    except IndexError:
        print('您输入的数字无效')
    
    万能异常
    try:
        name  # NameError
        dic = {}
        dic['key']
    except Exception as e:  # e 变量名
        print(type(e),e,e.__traceback__.tb_lineno)
    
    结果:<class 'NameError'> name 'name' is not defined 581
    
    万能异常和其他分支合作:万能异常永远放在所有except的最后.
    try:
        name
        [][3]
        import a
    except NameError:pass
    except IndexError:pass
    except Exception:pass
    
    异常处理的其他机制
    try:
        name
        [][3]
    except IndexError:print('index error')
    except NameError:print('name error')
    
    try:
        name
        [][3]
    except (IndexError,NameError)
        print("error")
    
    
    try:
        name
        [][3]
    except (IndexError,NameError) as e:
        print(e)
    else:try中的代码正常执行 没有异常的时候会执行else中的代码
    try:
        name
    except NameError:
        print("name error")
    else:
        print("执行了else")
    结果:name error
    
    try:
        a=1
    except NameError:
        print("name error")
    else:
        print("执行了else")
    结果:执行了else
    
    finally 无论如何都会执行 操作系统资源归还的工作
    try: name except NameError: print("name error") else: print("执行了else") finally: print("执行了finally")
    def func():
    try:
    f = open('file', 'w')
    return f.read()
    finally:
    f.close()
    print('执行我了')

    func()
    
    
    try:
    f = open('file','w')
    # f.read()
    exit()
    except:pass
    # 复杂的逻辑
    finally:
    f.close()
    print('执行我啦')
    try/except
    try/except/else
    try/except/else/finally
    try/except/finally
    try/finally
    
    主动抛异常
    try:
        num = int(input('>>>'))
    except Exception:
        print('在出现了异常之后做点儿什么,再让它抛异常')
        raise  # 原封不动的抛出try语句中出现的异常
    
    自定义异常
    raise NameError('这是一个name error的异常')
    class CWException(Exception):
        def __init__(self,msg):
            self.msg = msg
    raise CWException('这是一个什么什么错误,有什么问题')
    
    断言
    assert 布尔值
    assert True
    等价于if
    if False:
        print(1234234)
    else:
        raise AssertionError
    
    
    # 尽量少用异常处理
    # 能通过逻辑规避的应该代码逻辑规避掉
    # 应该对某一句/几句话来进行处理
    # 最后 在外层添加一个大的异常处理
     
     
  • 相关阅读:
    Python自动化开发从浅入深-语言基础
    Python自动化开发从浅入深-初识Python
    python访问mysql
    列表和元组核心办法
    字典核新方法
    字符串的核心应用
    个人总结:字典并非完全无序
    Python 基础【二】 下
    Python 基础【二】 上
    windows开发的python移植到linux的问题
  • 原文地址:https://www.cnblogs.com/chenyibai/p/9451915.html
Copyright © 2020-2023  润新知