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

    # 异常分为两种:
    # 语法异常。
    # name # NameError
    
    # if 3 > 2:
    #     print(666)
    #    print(333)  # IndentationError
    
    # 逻辑异常。
    # int(input('>>>'))
    # l1 = [1, 2, 3]
    # print(l1[100])  # IndexError
    
    # dic = {'name': 'alex'}
    # print(dic['age'])  # KeyError
    # print(666)

    什么是异常?

    异常发生之后,代码就不执行了。

    参考:https://www.cnblogs.com/jin-xin/articles/9291590.html

    # 1,if else...... 对于if语句处理异常只能处理简单的,如果考虑多个条件 不合适。
    # try except ...

    1、 单支情况。 try except
    # 尝试着运行try里面的代码,出现错误,按照错误类型去寻找相应的except,找到执行此except代码,然后程序继续运转。

    try:
        print(111)
        print(222)
        print(333)
        name
        l1 = [1, 2, 3]
        print(l1[100])
    
    except NameError:
        print('name  is not defined')
    print(666)


    2、 多支情况。try except except except .... 程序分流
    try:
        print(111)
        print(222)
        print(333)
        name
        l1 = [1, 2, 3]
        print(l1[100])
        dic = {'name': 'alex'}
        print(dic['age'])
    
    except NameError:
        print('name  is not defined')
    
    except IndexError:
        print('索引超出范围....')
    
    except KeyError:
        print('没有此key...')
    
    print(666)

    3、 万能处理。 Exception包含了python提供的所有错误类型

    小结:

    # 万能: 如果你对错误原因不关心,只是想不让其报错,那么程序中你就用万能处理。
    # 多分支: 如果你对错误原因需要进行不同分流或者程序处理,那么就需要多分支。
    对blog进行修改:

    这样有欠缺,我们要实现不同的错误报不同的类型,用多分支。

     

    4、 多分支 加 万能处理。 : 对某些错误需要进行分流处理,剩下的错误直接跳过。

    5、try except else

    # 如果出现异常 就不会走else逻辑,不出现异常,则执行else逻辑。

     try else举例:

    出现异常,就不走else程序。也相当于支持事物的回滚。else成功之后才行else

    try:
        print('二狗 向 脸哥转了 200元')
        name
        print('脸哥确认收到了 200元')
    
    except NameError:
        print('name  is not defined')
    
    else:
        print('转账成功')
    print(666)

     6、try except else finally

    # finally 无论报不报错都执行,如果报错,finally是在报错之前执行的!!!

    finally举例:文件操作:

    # f1 = open('a.log', encoding='utf-8')
    # f1.read()
    # '''
    # 各种对文件操作的代码,但是可能会出错,出错之后,你的文件句柄无法关闭。
    # '''
    # f1.close()

    # finally 会在retrurn之前先执行。
    def func(a):
        try:
            a += 1
            return a
        finally:
            print(333)
    
    print(func(5))

    finally用在哪里: 以后如果遇到关闭连接,数据库连接等等。

    7、自定义异常处理(捕捉异常)

    # python提供了大部分异常,但是不是所有,比如 大的框架的手机连接问题,网络引发的代码问题等等。
    # Exception 也处理不了。

    # EOFError
    # NameError
    # Exception

    # 程序中如果出现了python解决不了的异常 比如 PhoneConnectionError

    
    
    class PhoneConnectionError(BaseException):
        pass
    try:
        raise PhoneConnectionError('类型错误')   #raise就是主动抛出一个异常
    except PhoneConnectionError:
        print('手机连接出现问题')

    8、断言

    # 源码中经常遇到  条件只要不成立,我就抛出错误
    assert 1 == 1  #不报错
    assert 1 == 2  #报错AssertionError

    part9:try..except的方式比较if的方式的好处

    try..except这种异常处理机制就是取代if那种方式,让你的程序在不牺牲可读性的前提下增强健壮性和容错性

    异常处理中为每一个异常定制了异常类型(python中统一了类与类型,类型即类),对于同一种异常,一个except就可以捕捉到,可以同时处理多段代码的异常(无需‘写多个if判断式’)减少了代码,增强了可读性 

    使用try..except的方式

    1:把错误处理和真正的工作分开来
    2:代码更易组织,更清晰,复杂的工作任务更容易实现;
    3:毫无疑问,更安全了,不至于由于一些小的疏忽而使程序意外崩溃了;

    什么时候用异常处理

    有的同学会这么想,学完了异常处理后,好强大,我要为我的每一段程序都加上try...except,干毛线去思考它会不会有逻辑错误啊,这样就很好啊,多省脑细胞===》2B青年欢乐多

    try...except应该尽量少用,因为它本身就是你附加给你的程序的一种异常处理的逻辑,与你的主要的工作是没有关系的
    这种东西加的多了,会导致你的代码可读性变差,只有在有些异常无法预知的情况下,才应该加上try...except,其他的逻辑错误应该尽量修正

    
    


  • 相关阅读:
    python-学习笔记之-Day5 双层装饰器 字符串格式化 python模块 递归 生成器 迭代器 序列化
    python学习笔记-day4笔记 常用内置函数与装饰器
    Python学习笔记-Day3-python内置函数
    Python学习笔记-Day3-文件操作
    Python学习笔记-Day3-python函数
    Python学习笔记-Day3-python关键字
    Python学习笔记-Day3-set集合操作
    Python学习笔记-Day2-Python基础之列表操作
    Python学习笔记-Day2-Python基础之元组操作
    Python学习笔记-Day2-Python基础之字典操作
  • 原文地址:https://www.cnblogs.com/wangkaiok/p/10056424.html
Copyright © 2011-2022 走看看