• 异常处理


    names = ['alex','jack']

    #尝试(try) 执行names[3]这段代码;除非(except) 出了IndexError这个错,e 是错误种类的详细信息;注意try外的代码错误,except不能捕获到;
    try:
    names[3]
    except (IndexError) as e :
    print("没有这个索引",e)
    --------------------------------------------------------------------------------
    names = ['alex','jack']
    data = {}
    try:
    # names[3]
    data['ssss'] #try下只要有一个报错了,try中这个报错后面的代码都不执行,就跳转到except 中匹配错误
    #也就是说data['ssss']这行报错了,就跳转到下面的except来匹配对应KeyError的错误,open("tes.txt")这行就不执行了
    open("tes.txt")

    except (KeyError,IndexError) as e : #匹配到KeyError和IndexError统一处理可以这样写
    print("没有这个key",e)
    except IndexError as e :
    print("列表操作错误",e)
    except Exception as e: #Exception 抓住所有错误,但是不包含 代码没有正确对齐(IndentationError )、语法错误(SyntaxError)
    #因为这样的错误会导致代码不能往下面执行(这行报错后面的代码都执行不了了),编译都编译不;
    print("未知错误",e)
    else: #如果上面列的所有错误种类都没有匹配到,执行这个
    print("一切正常")
    finally: #不管try中代码有没有错误,都执行
    print("不管有没有错,都执行")

    --------------------------------------------------------------------------------
    自定义异常:
    class AlexError(Exception):
    def __init__(self, msg):
    self.message = msg

    # __str__方法默认可以不写,默认print实例,输出的是实例初始化时,传递的值(也就是这里的msg参数的值);如果写了__str__就是重构Exception中的 __str__了
    # def __str__(self):
    # return 'sdfsf'
    try:
    raise AlexError('数据库连不上') # 触发(raise) AlexError这个种类的错误,自定义异常需要自己触发,那些except抓取只能抓python标准的报错
    except AlexError as e:
    print(e)

    --------------------------------------------------------------------------------
    自定义异常不要和Python内置的异常名称一样:

    class IndexError(Exception):        #自定义IndexError错误
    def __init__(self,mes):
    self.message = mes
    names = []

    try:
    names[9]

    except IndexError as e: #这行会接收不到异常,代码崩溃 #except IndexError 这个调用的是自己定义的异常;
    print(e)


    
    
    自己定义的异常IndexError与Python内置的IndexError这个异常名称重复;
    except IndexError 这个调用的是自己定义的异常;
    这个except IndexError 只能捕获触发自己的IndexError的异常;Python标准的IndexError这个异常捕获不到;
    自己定义的IndexError,错误信息是__main__.IndexError,代表本程序自己的IndexError;
    Python内置的IndexError的错误信息是IndexError



    测试代码如下:

    print(id(IndexError))   #python 标准错误IndexError的内存地址
    C = IndexError

    class IndexError(Exception):
    def __init__(self,mes):
    self.message = mes
    print(id(IndexError)) #自定义错误IndexError的内存地址
    names = []
    # C = IndexError #这行注释,这个代码就不报错,不注释,就报错
    print(id(C),id(IndexError))
    try:
    names[9]

    except C as e:
    print(id(C))
    print(id(IndexError))
    print(e)


    #-------------------------------------------------------------------------------
    traceback.print_exc()   # 显示报错在哪一行

    参考:
    http://www.cnblogs.com/wupeiqi/articles/5017742.html
  • 相关阅读:
    仿苹果菜单的效果
    不用系统自带的复选框,单选按钮,选择框的样式,该怎么做
    js面向对象(三)---组件开发
    JS面向对象(二)---继承
    js面向对象(一)---基本的概念、属性、方法
    移动端新建html页面
    《程序员思维修炼》读后摘录
    做一个简单的贪吃蛇游戏
    做一个简单的遮罩层
    在不同设备上控制元素
  • 原文地址:https://www.cnblogs.com/lighthouse/p/9685094.html
Copyright © 2020-2023  润新知