zoukankan      html  css  js  c++  java
  • 28 -3 异常、断言

    异常处理

    什么是异常

    异常和错误的区别

    • error 错误 比较明显的错误 再编译代码阶段就能检测出来 
    • 异常 再执行代码的过程中引发的异常

    异常发生了是什么效果

    如何查看报错信息

    最简单的异常异常处理

    pass

    多分支异常处理

    l = ['d','z','t']
    
    for i in enumerate(l ,1):
        print(i[0],i[1])
    try:
        num = int(input('num:'))
        print(l[num-1])
    except ValueError:
        print("请输入一个数字")
    except IndexError:
        print("您输入的数字无效")
        
    #当出现ValueError、IndexError 可以很好的解决

    但是异常是很多的,总部呢个全部except +异常:  把?

    所以介绍一下 万能异常

    try:
        #name
        dic= {}
        dic["key"]
    except Exception: # 万能异常
        pass

    可是上面所有异常都给你解决了。你不是抓虾吗?

    所以 这样用/!

    try:
        # name
        dic = {}
        dic["key"]
    except Exception as e:  # e随意取,是一个对象
        print(type(e), e, e.__traceback__.tb_lineno)
    # <class 'KeyError'> 'key' 18  (18是行数)

    万能异常和其他分支合作

    try:
        name
        [][3]
        import a
    except NameError: pass
    except IndexError: pass
    except Exception: pass   # 万能异常永远放在最后一个except,因为上面有异常,就相应停止+报错了

    异常处理的其他机制

    try+except

    try:
        name
        [][3]
    except (IndexError,NameError) as e:
        print(e)   # name 'name' is not defined

    try+except+else

    try:
        name
        [][3]
        import a
    except NameError: 
        print("name error")
    else:
        print("没有错,就执行else")

    try+ except+else+finally

    try:
        name
        [][3]
        import a
    except NameError:
        print("name error")
    else:
        print("没有错,就执行else")
    finally:
        print("无论如何都会执行我")

    那finally无论如何都会执行,那有和放在平常的地方,有何区别, 有啥用?

      例如打开文件 f = open(xx),最后finally 执行f.close()

    居然return了后 ,还能执行我finally!?牛皮,靠谱

    def func():
        try:
            f = open('file',"w")
            return f.read()
        finally:
            f.close()
            print('执行我了,那么就等于执行finally')
    
    func()
    
    ++++++++++++++++
    执行我了,那么就等于执行finally
    Traceback (most recent call last):
      报错信息
    View Code

    finally :资源回收

    有这么几种组合

    try/excpet

    try/excpet/else/finally

    try/excpet/finally

    try/finally

    主动抛出异常

    raise  TimeoutErro
    try:
        num = int(input(">>>"))
    except ValueError:
        raise NameError
    
    #原封不动排除try语句出现的异常,再抛出我们设置的NameError,

    自定义异常

    class DdException(BaseException): # 或者继承Exception
        def __init__(self, msg):
            self.msg = msg
    
    raise  DdException('这是一个X错误,有X问题')   # 传入错误提示
    # Exception 是祖宗能处理99%+的异常,BaseException是祖宗的祖宗 能处理全部异常

    断言

    assert 布尔值
    # 只要是这个布尔是正确的 就往下走。错误就抛出异常 相当于下面的if else
    # 好处是不用缩进,只要一行代码
    assert True

    等于

    if False:
        print(123)
    else:
        raise AssertionError

    使用异常处理的注意事项

     断言assert  ;抛出异常 raise

    后期写框架的时候用

    不能提示用户。这是给程序员看的

  • 相关阅读:
    关于firstChild,firstElementChild和children
    trim(),正则表达式中文匹配
    Shell之基本用法
    Samba服务部署
    Linux基础(3)
    linux基础(2)
    Linux基础(1)
    网络基础及网络协议
    操作系统简介
    为何要学习计算机基础
  • 原文地址:https://www.cnblogs.com/zhuangdd/p/12669784.html
Copyright © 2011-2022 走看看