zoukankan      html  css  js  c++  java
  • 异常

    异常

    异常就是错误发生的信号,一旦程序出错,并且程序没有处理这个错误,那就会抛出异常,并且程序的运行随之终止

    1.异常的三个部分

    • Traceback 异常的追踪信息
    • ValueError 异常的类型
    • 异常的值

    2.异常的错误类型

    语法错误:int('aaa')    # ValueError: invalid literal for int() with base 10: 'aaa'

    逻辑错误:  for i in 3:print(i)  #TypeError: 'int' object is not iterable

    3.异常的强调

    强调一: 对于错误发生的条件是可以预知的,此时应该用if判断去预防异常

    AGE=10
    age = input('>>:').strip()
    if age.isdigit(): #通过isdigit方法可以让用户在输入非int类型的时候,不让程序崩溃,进而出现异常
        age=int(age)
        if age > AGE:
            print('太大了')

    强调二: 对于错误发生的条件是不可预知的,此时应该用异常处理机制,try...exceot

    • 程序报错后,不会崩溃,会继续执行下面的代码
    • 异常类只能对指定的异常进行处理,对于非指定的异常则无法处理
    try:
        f = open('a.txt','r',encoding='utf-8')
    
        print(next(f),end='')
        print(next(f),end='')
        print(next(f),end='')
        print(next(f),end='')
        print(next(f),end='')
    
        f.close()
    except StopIteration:
        print('出错了')
    
    print('>>>1')
    print('>>>2')

    4.异常的分类

    1.多分支:被监测的代码块抛出的异常有多种可能性,并且我们需要针对每一种异常类型,都定制专门的处理逻辑

    2.万能异常: Exception,被监测的代码块抛出的异常有多种可能性,并且我们需要针对所有异常类型,都只有一种的处理逻辑

    3.主动出发异常: raise 异常类型(值) 例如:raise TypeError('age必须为int')

    4.自定义异常类型

    5.断言assert: 未被检测的代码,要依靠被检测代码实行的结果,用到assert

    5.异常的种类

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

    # 只有在错误一定会发生,无法预知他发生的条件,不能让程序因此崩溃掉
    
    #多分支:被监测的代码块抛出的异常有多种可能性,并且我们需要针对每一种异常类型,都定制专门的处理逻辑
    
    # try:
    #     print('===>1')
    #     # name
    #     print('===>2')
    #     l=[1,2,3]
    #     # l[100]
    #     print('===>3')
    #     d={}
    #     d['name']
    #     print('===>4')
    #
    # except NameError as e:
    #     print('----->',e)
    #     #-----> name 'name' is not defined
    #
    # except IndexError as e:
    #     print('----->',e)
    #     #-----> list index out of range
    #
    # except  KeyError as e:
    #     print('----->',e)
    #     #-----> 'name'
    
    
    #万能异常: Exception,被监测的代码块抛出的异常有多种可能性,
    # 并且我们针对所有的异常类型,都只用一种的处理逻辑
    # try:
    #     print('===>1')
    #     name
    #     print('===>2')
    #     l=[1,2,3]
    #     l[100]
    #     print('===>3')
    #     d={}
    #     d['name']
    #     print('===>4')
    #
    # except Exception as e:
    #     print('异常发生:',e)
    
    # try:
    #     print('===>1')
    #     # name
    #     print('===>2')
    #     l=[1,2,3]
    #     # l[100]
    #     print('===>3')
    #     d={}
    #     d['name']
    #     print('===>4')
    #
    # except NameError as e:
    #     print('----->',e)
    #
    # except IndexError as e:
    #     print('----->',e)
    #
    # except  KeyError as e:
    #     print('----->',e)
    #
    # except Exception as e:
    #     print('统一的处理方法:',e)
    
    
    #其他结构
    # try:
    #     print('===>1')
    #     # name
    #     print('===>2')
    #     l=[1,2,3]
    #     # l[100]
    #     print('===>3')
    #     d={}
    #     d['name']
    #     print('===>4')
    #
    # except NameError as e:
    #     print('----->',e)
    #
    # except IndexError as e:
    #     print('----->',e)
    #
    # except  KeyError as e:
    #     print('----->',e)
    #
    # except Exception as e:
    #     print('统一的处理方法:',e)
    #
    # else:
    #     print('在被检测代码块没有发生异常时执行')
    #
    # finally:
    #     print('不管被检测代码块有无发生异常都会执行')
    
    
    #当涉及到资源回收的时候
    # try:
    #     f=open('a.txt','r',encoding='utf-8')
    #     print(next(f))
    #     print(next(f))
    #     print(next(f))
    #     print(next(f))
    #
    #     print(next(f))
    # finally:
    #     f.close()
    
    
    #主动出发异常: raise 异常类型(值)
    # class People:
    #     def __init__(self,name,age):
    #         if not isinstance(name,str):
    #             raise TypeError('名字必须传入str类型')
    #         if not isinstance(age,int):
    #             raise TypeError('年龄必须传入int类型')
    #
    #         self.name=name
    #         self.age=age
    #
    # p=People('yang',18)
    
    
    #自定义异常类型
    class MyException(BaseException):
        def __init__(self,msg):
            super(MyException,self).__init__()
            self.msg=msg
    
        def __str__(self):
            return ('<%s>' %self.msg)
    
    raise  MyException('自己的异常类型')
    
    
    
    
    
    
    #断言assert
    
    # info={}
    # info['name']='yang'
    # info['age']=18
    
    # if 'name' not in info:
    #     raise KeyError('必须有name这个key')
    #
    # if 'age' not in info:
    #     raise KeyError('必须有age这个key')
    
    # assert ('name' in info) and ('age' in info)
    #
    # if info['name'] == 'yang' and info['age'] > 10:
    #     print('welcome')

     

  • 相关阅读:
    SlidingMenu和ActionBarSherlock结合滑动式菜单都
    Actionbarsherlock 简明教程
    Ajax表单提交插件jquery form
    form 转json最佳示例
    构造AJAX参数, 表单元素JSON相互转换
    jquery序列化form表单使用ajax提交后处理返回的json数据
    firefox插件poster的使用,发起自定义http请求
    android学习8(ListView高级使用)
    Linux server关闭自己主动
    阅读安卓在线(Android)系统源代码
  • 原文地址:https://www.cnblogs.com/Mryang123/p/8627227.html
Copyright © 2011-2022 走看看