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

    """
    1、什么是异常
        异常是错误发生的信号,一旦程序出错就会产生一个异常
        如果该异常没有被处理,该异常就会被抛出来,程序的运行随即终止

    如图:

    img

    异常常用种类

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

          AttributeError:对象属性不存在
              对象.属性

          ValueError:
              int("asdf")

          TypeError:
              "asdf"+1111

          ZeroDivisionError
              1/0
      3、异常的内容信息

    2、为何要处理异常
        为了增强程序的健壮性

    3、如何处理异常
        1、针对语法的错误:应该在程序运行前立即改正
        2、针对逻辑错误:
            2.1 如果逻辑错误发生的条件是可以预知的,应该if判断解决,预防异常
                age = input('>>: ').strip()
                if age.isdigit():
                    age=int(age)
                    if age > 18:
                        print('too big')
                    elif age < 18:
                        print('too small')
                    else:
                        print("got it")
                else:
                    print('必须输入数字')
            2.2 如果逻辑错误发生的条件是不可预知的,那么异常一个会发生,考虑到程序的健壮性
                我们应该处理异常,做好补救措施
                try:
                    代码块
                except 异常的类型:
                    发生异常后要执行的代码

    """

    # 例1

    # try:

    #     print("====>111")

    #     print("====>222")

    #     xxx

    #     print("====>333")

    # except AttributeError as e:

    #     print(e)

    #

    # print('====>4')

    # 例2

    # try:

    #     print("====>111")

    #     print("====>222")

    #     xxx

    #     print("====>333")

    # except NameError as e:

    #     print(e)

    #

    # print('====>4')

    # # 例3

    # try:

    #     print("====>111")

    #     print("====>222")

    #     # xxx

    #     # l=[]

    #     # l[0]

    #     dic={}

    #     dic["k1"]

    #     print("====>333")

    # except (NameError,IndexError) as e:

    #     print("=---->",e)

    # except KeyError as e:

    #     print(e)

    #

    # print('====>4')

    # # 例4

    # try:

    #     print("====>111")

    #     print("====>222")

    #     xxx=111

    #     # l=[]

    #     # l[0]

    #     dic={}

    #     # dic["k1"]

    #     print("====>333")

    # except (NameError,IndexError) as e:

    #     print("=---->",e)

    # except KeyError as e:

    #     print(e)

    # finally:

    #     print("一定会运行")

    # print('====>4')

    # # print(xxx)


    # # 例4

    # try:

    #     print("====>111")

    #     print("====>222")

    # finally:

    #     print("一定会运行")

    # print('====>4')

    # # print(xxx)

    # # 例5

    # try:

    #     print("====>111")

    #     print("====>222")

    #     # xxx

    #     l=[]

    #     # l[0]

    #     dic={}

    #     dic["k1"]

    #     print("====>333")

    # except Exception as e:

    #     print("万能异常",e)

    # print('====>4')

    # 例6

    # print('==>11')

    # raise NameError("变量名未定义")

    # print('==>222')


    # class Animal:

    #     def speak(self):

    #         raise BaseException("小垃圾必须实现speak方法来覆盖")

    #

    #     def run(self):

    #         raise BaseException("小垃圾必须实现run方法来覆盖")

    #
    #

    # class Dog(Animal):

    #     pass

    #

    # class Pig(Animal):

    #     pass

    #
    #

    # d=Dog()

    # p=Pig()

    #

    # d.speak()

    # d.run()

    # p.speak()

    # d.run()

    # 例7

    # class Interface(BaseException):

    #     def __init__(self, msg, x, y, z):

    #         self.msg = msg

    #         self.x = x

    #         self.y = y

    #         self.z = z

    #

    #     def __str__(self):

    #         return "<%s:%s:%s:%s>" % (self.msg,self.x,self.y,self.z)

    #
    #

    # raise Interface("接口异常", 11, 22, 33)

    # 例8:

    print("====1")
    print("====2")
    print("====3")
    salaries=[1.1,2.2]

    # if len(salaries) != 3:

    #     raise NameError

    assert len(salaries) == 3

    print(salaries[2])
    print(salaries[2])
    print(salaries[2])
    print(salaries[2])
    print(salaries[2])
    print(salaries[2])
    print(salaries[2])
    print(salaries[2])
    print(salaries[2])
    print(salaries[2])
    print(salaries[2])
    print(salaries[2])
    每天逼着自己写点东西,终有一天会为自己的变化感动的。这是一个潜移默化的过程,每天坚持编编故事,自己不知不觉就会拥有故事人物的特质的。 Explicit is better than implicit.(清楚优于含糊)
  • 相关阅读:
    xrange和range区别
    bool([x]) 将x转换为Boolean类型
    bin(x) 将整数x转换为二进制字符串
    chr(i) 返回整数i对应的ASCII字符
    音乐欣赏
    迅雷下载百度云引发的“事故”
    swift获取图片路径出错
    记号笔写在白板上引起的尴尬而又无奈的事件
    swift 3新特性总结
    watch
  • 原文地址:https://www.cnblogs.com/kylin5201314/p/13511847.html
Copyright © 2011-2022 走看看