• 11.1


    异常处理:之所以学习异常处理是为了让程序更加稳定(健壮性)不容易崩溃

      什么是异常?

    异常是错误发生前的一种信号

    如果没有人来处理这个信号 程序就会中断执行并抛出错误信息

      异常分类:

        1.语法检测异常:这种异常是最低级的异常,绝对不能犯。

        2.运行时异常:这种异常只有在执行代码时才会被发现,我们要处理的重点就是运行时的异常。特点:在没有运行代码前 是无法发现的,如果运行时异常已经发生并且没有正确的处理 就会抛出错误信息 并且中断程序的执行  这是要我们学习异常解决的问题。

      异常的组成:

        1.追踪信息 (具体发生异常的位置 以及函数的调用顺序)

        2.异常的类型

        3.异常的消息 

    常见异常:

      AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
      IOError 输入/输出异常;基本上是无法打开文件
      ImportError 无法引入模块或包;基本上是路径问题或名称错误
      IndentationError 语法错误(的子类) ;代码没有正确对齐
      IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
      KeyError 试图访问字典里不存在的键
      KeyboardInterrupt Ctrl+C被按下
      NameError 使用一个还未被赋予对象的变量
      SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
      TypeError 传入对象类型与要求的不符合
      UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它

      ValueError 传入一个调用者不期望的值,即使值的类型是正确的

    万能异常类型Exception  BaseException

    处理异常常用的语法:

      try:

        一个异常代码

      except  异常的类型  :

        当这种类型异常代码执行时,执行except中的代码,且后面的代码全都不执行

    不太常用的语法:

      try:

        一个异常代码

      except  异常的类型  :

        ...............

      else:

        try没有发生异常时执行

      finally:

        无论是否发生异常都会执行finally

    主动抛出异常:用于限制用户(没有遵循时抛出异常)

    raise

    age = input("请输入整型的年龄:")
    if not age.isdigit():
        raise TypeError("你输入的不是整型!")
    age = int(age)
    print("十年后你%s岁" % (age + 10))

    断言:

      下面的代码必须依赖上面代码的正确数据

    语法assert 没有assert也可以用if判断,仅仅是简化了代码

    # 第一部分代码 负责产生一个列表
    li = []
    # li.append(1)
    # li.append(2)
    # 这里一定要确保数据是有效的
    # if len(li) < 1:
    #     raise ValueError("列表中没有数据!")
    assert len(li) > 0
    # 需要使用列表中的数据来完成任务 如果没有数据无法完成
    print(li[0])
    print(li[0])
    print(li[0])
    print(li[0])

    自定义异常类型:当系统提供的异常类型和你要描述的错误不匹配时,就需要自定义异常类型

      写法:class 自定义类型名称(BaseException):

    class UnlikeError(BaseException):
        def __init__(self,msg,text):
            self.msg=msg
            self.text=text
    
    def hello():
            x=input('请输入一段话:')
            if x=='你真帅':
                print('你说得对')
            else:
                raise UnlikeError('你再好好想想','想清楚了再说')
    
    try:
        hello()
    except UnlikeError as e:
        print(e.msg,e.text)

    之所以使用自定义常用类型,是为了能让使用者一眼就能看出错误。

    在except中可以用as来获取异常

  • 相关阅读:
    EF的Join()和Include()差异性教程
    把sql server 2000的用户表的所有者改成dbo
    HTML5/CSS3开发工具
    原创:分享asp.net伪静态成目录形式iis如何设置
    WCDMA是什么意思?CDMA是什么意思?GSM是什么意思
    FlashDevelop快捷键
    android文章学习 侧滑菜单实现
    网页图片格式
    asp.net日志跟踪方法
    Zabbix分布式监控
  • 原文地址:https://www.cnblogs.com/zhanggq/p/9890025.html
Copyright © 2020-2023  润新知