zoukankan      html  css  js  c++  java
  • 12.异常、异常处理、断言、推导表达式

             异常         

    异常本身是类的实例

    一、异常

    >>> a
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'a' is not defined
    >>> a === 2
      File "<stdin>", line 1
        a === 2
            ^
    SyntaxError: invalid syntax
    >>> a()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'a' is not defined

    二、Python的异常结构 (基于继承)

    在 Python 中所有的异常都是继承自 BaseException 直接分为四大类:

    1、SystemExit:Python退出异常

    2、KeyboardInterrupt: 键盘打断(Ctrl+C)

    3、GeneratorExit: 生成器退出(下次课再讲)

    4、Exception: 普通异常(只会使用这部分的异常)

    三、错误回溯

         异常处理      

     1、基本的 try … except …

    2、捕获具体的异常捕获多种异常

    3、关于 Exception 及其 子类 的解释

    4、更加丰富的结构

    代码中会出现的异常都是 Exception 的子类, 因此在 except 中只需要在最后加上 Exception 即可

    在捕获异常的过程中,会从上倒下依次对比异常,找到之后就不会再往后查找

    try:
        print("-------------1------------")    #有可能出错的代码
        print(c)
        print("------------2-------------")
    except NameError as info:   #在这里用as 将捕获到的异常 用一个变量保存
        print("捕获到了异常,会执行我下面的代码对异常进行处理")
        print(info)  #把捕获的信息返回出去
    else:
        print("没有捕获到异常执行我")
    finally:
        print("不管有没有异常都会执行我")
    
    # 注意事项:
    # 1. try       下面放可能出错的代码
    # 2. except  try下面的代码出错后,会执行except下面的代码
    # 3. else      try下面代码没有错误,执行else下面的代码
    # 4. finally 不管try下面的代码有没有出错,始终都会执行
    
    -------------1------------
    捕获到了异常,会执行我下面的代码对异常进行处理
    name 'c' is not defined
    不管有没有异常都会执行我

    5、扩展(自定义异常类型)

    class MyError(Exception):    #自定义异常必须继承于Exception
        pass
    raise MyError 
    
    
    try:
        raise NameError          #主动抛出异常
    except NameError:
        print("报错了")
    #raise 主动抛出异常
    # 格式:raise 异常类型
    # 注意:raise  是主动抛出后面写的异常类型

             断言         assert

    assert 1 == 1      #条件成立往下运行 条件不成立报错
    print("======================")
    
    # 断言语句是将调试断言插入程序的一种便捷方式
    # assert 的语法规则是:
    # 表达式返回 True  不报错
    # 表达式返回 False  报错  报 AssertionError     #断言错误

        推导表达式    

     一、列表推导

    二、集合和字典推导

  • 相关阅读:
    RequestMapping_PathVariable注解
    RequestMapping_Ant 路径
    RequestMapping_请求参数&请求头
    RequestMapping_请求方式
    RequestMapping注解_修饰类
    18)C++对C的增强
    17)C++开始--命名空间
    16)未理解透
    15)文件函数例子
    14)文件操作
  • 原文地址:https://www.cnblogs.com/lyh-520/p/9306346.html
Copyright © 2011-2022 走看看