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

    一.什么是异常,

    指的是与正常情况不同.在程序中程序的正常执行过程是按照代码顺序一行一行的执行,直到所有的代码都执行完成.

    如果期间出现错误使代码不能正常运行完成就是异常,

    当异常发生时解释器会打印异常的详细信息 并且终止程序的执行

    如何排查错误

    1.定位到错误发生的位置:

    (1)如果自己写的代码,没有调用任何模块那就错误发生在最后一行,

    (2)如果代码调用其他的模块

      (1)系统内置模块 例如抛出object不用去查看object 他机会不可能出错

      (2别人写的模块是有可能出错的 所以 你可以按照追踪信息点
    击去看看绝招:如果有很多追踪信息 找最后一行是你自己写代码的位置

                

    a =
    SyntaxError: invalid syntax   语法错误
    
    age
    NameError: name 'age' is not defined   名字不存在
    
    open("asasasas")
    FileNotFoundError: [Errno 2] No such file or directory: 'asasasas'  路径错误
    
    f = open("1.今日内容")
    f.close()
    f.read()
    ValueError: I/O operation on closed file.   文件已经关闭  你还要去读写
    
    f = open("1.今日内容",mode="rt",encoding="utf-8")
    f.write("123")
    io.UnsupportedOperation: not writable 不能写入数据  读写模式错误导致
    
    
    int("abc")
    ValueError: invalid literal for int() with base 10: 'abc' 数据的值错误导致
    
    
    def func():
     print(1)
      print(2)
    IndentationError: unexpected indent   缩进错误
    
    
    li = []
    li[1]
    IndexError: list index out of range   索引不存在
    
    dic = {}
    dic["name"]
    KeyError: 'name'   key不存在

    二.

    异常可以由 发生的时间不同分为两类
    1.语法检测异常
    解释器在执行代码前会先检测语法 检测通过才会开始执行
    如果这个阶段发生了异常 代码一行都不会执行
    语法错误 和 缩进错误
    这种低级错误 就别问了
    2.运行时异常
    已经通过了语法检测 在解析执行期间发生的异常

    print("start")
    
    a = int("abc")
    
    print("over")
    
    li = []
    语法1
    try:
         # 把可能发出错误的代码放到try中
        print("start")
        # a = int("abc")
        li[1]
        print("over")
    
    except ValueError:
        # 当try中真的发生了错误 就会执行 except中的代码
        # 在这里可以做一些补救措施
        print("发生了 ValueError异常")
    
    print("over")
    
    
    
    # 语法2 except可以有多个
    try:
         # 把可能发出错误的代码放到try中
        print("start")
        a = int("abc")
        li[1]
        print("over")
    
    except ValueError:
        # 当try中真的发生了错误 就会执行 except中的代码
        # 在这里可以做一些补救措施
        print("发生了 ValueError异常")
    except IndexError:
        print("发生了 IndexError  索引不正确")
    print("over")
    
    
    
    语法4 万能异常 Exception类  尽量少用 可能会导致 程序既不报错 也不正常运行 无法定位错误位置
    try:
         # 把可能发出错误的代码放到try中
        print("start")
        # a = int("abc")
        # li[1]
        10 / 0
        dic = {}
        dic["name"]
        print("over")
    
    except Exception:
        print("可能是任何类型的错误 反正是发生错误了")
    print("over")
    
    
    
    语法5 万能异常 Exception类  建议 输出异常的值
    try:
         # 把可能发出错误的代码放到try中
        print("start")
        # a = int("abc")
        # li[1]
        10 / 0
        dic = {}
        dic["name"]
        print("over")
    
    # 可以通过给异常取别名 来获取异常的对象  对象中包含了错误信息
    except Exception as e:
        print("可能是任何类型的错误 反正是发生错误了")
        print(e)
        print(type(e))
    print("over")
    
    
    
    
    
    # 语法6 先捕获能够明确的异常类型 最后捕获万能异常类型
    try:
         # 把可能发出错误的代码放到try中
        print("start")
        # a = int("abc")
        # li[1]
        # 10 / 0
        dic = {}
        dic["name"]
        print("over")
    except ValueError:
        print("值不对.....")
    except ZeroDivisionError:
        print("除数不能为0")
    # 可以通过给异常取别名 来获取异常的对象  对象中包含了错误信息
    except Exception as e:
        print("可能是任何类型的错误 反正是发生错误了")
        print(e)
        print(type(e))
    
    print("over")
    
    
    语法7 try except else
    try:
         # 把可能发出错误的代码放到try中
        print("start")
        # a = int("abc")
        # li[1]
        # 10 / 0
        dic = {}
        # dic["name"]
        print("over")
    except ValueError:
        print("值不对.....")
    except ZeroDivisionError:
        print("除数不能为0")
    # 可以通过给异常取别名 来获取异常的对象  对象中包含了错误信息
    except Exception as e:
        print("可能是任何类型的错误 反正是发生错误了")
        print(e)
        print(type(e))
    else: #当没有发生异常会执行else    只能except的后面
        print("执行了else")
    print("over")
    
    
    
    语法8 try except finally
    try:
         # 把可能发出错误的代码放到try中
        print("start")
        # a = int("abc")
        # li[1]
        # 10 / 0
        dic = {}
        # dic["name"]
        print("over")
    except ValueError:
        print("值不对.....")
    finally: #无论是否发生异常 最后都会执行finally中的代码
        print("finally")
    print("over")
    
    
    import io
    # finally的使用场景  可以用finally来执行一些清理操作  类似__del__
    try:
        print("start")
        f = open("1.今日内容","rt",encoding="utf-8")
        f.read()
        print("end")
    except FileNotFoundError:
        print("文件路径错误...")
    except io.UnsupportedOperation:
        print("文件不能被写入....")
    finally:
        f.close()
    
    
    print(f.closed)
    完整的书写顺序 
    try
    except
    else
    finally
    """
    # 你需要掌握的语法
    """
    1.
    try:
    except:

    2.
    try:
    except:
    finally:
    """
    # 正确使用异常处理
    """
    1.如果能明确知道异常发生原因 就不要产生异常 使用if判断等方式
    2.不知道异常发生的原因 但是知道异常的类型 那就明确捕获该类型的异常
    3.不知道发生原因 也不知道 异常的类型 可以使用万能异常 但是一定要打印异常消息
    """
  • 相关阅读:
    OCP 071【中文】考试题库(cuug整理)第39题
    OCP 071【中文】考试题库(cuug整理)第38题
    OCP 071【中文】考试题库(cuug整理)第37题
    OCP 071【中文】考试题库(cuug整理)第36题
    OCP 071【中文】考试题库(cuug整理)第35题
    OCP 071【中文】考试题库(cuug整理)第34题
    POST 数据的丢失 +号
    Windows下使用 sqlmap 测试注入
    多部电梯的测试用例
    如何测试购物车?
  • 原文地址:https://www.cnblogs.com/fanbiyong/p/10149696.html
Copyright © 2011-2022 走看看