zoukankan      html  css  js  c++  java
  • 环境小硕的转行之路-23-异常处理

    异常处理

    常见的变量代称

    1.NameError 变量错误
    2.IndexError 列表index错误
    3.KeyError 字典的key不存在
    4.EOFError iteration到末端
    5.FileNotFoundError
    6.8ModuleNotFoundError*
    7.ValueError 值的类型不匹配
    以下的应该在写代码的时候就规避掉
    8.SyntaxError 语法错误
    9.NameError 变量错误

    需要报错的情景以及报错的常见情况

    #什么时候最容易出异常:有用户参与的时候,有外界数据介入的时候,从文件里读或从网络上获取.
    #当有多行报错的时候,为啥?
    ''' 
    # def func1():name
    # def func2():
    #     func1()#最后才报func1()
    # def main():
    #     func2()#第二报func2()
    # main()#先报main
    
     Traceback (most recent call last):
      File "C:/Users/Administrator/PycharmProjects/全栈学习/day20/01异常处理.py", line 18, in <module>
        main()
      File "C:/Users/Administrator/PycharmProjects/全栈学习/day20/01异常处理.py", line 17, in main
        func2()
      File "C:/Users/Administrator/PycharmProjects/全栈学习/day20/01异常处理.py", line 15, in func2
        func1()
      File "C:/Users/Administrator/PycharmProjects/全栈学习/day20/01异常处理.py", line 13, in func1
        def func1():name
      NameError: name 'name' is not defined
    '''
    

      

    except以及多分支

    #try 可以只有一个 except可有多个(多分支),多分支合并: 多个error可以放到一个元组再放到一个except下.
    # 多分支合并
     l = ['login','register']
     for num,i in enumerate(l,1):
         print(num,i)
    
     try:
         num = int(input('num >>>'))
         print(l[num - 1])
     except (ValueError,IndexError) :
         print('您输入的内容不合法')
     #万能异常except:(等所有程序开发完了,测试完了才开始用万能异常)
    #示例:
    def buy():
        print('buy')
        name#valueerror
    
    def back():
        print('back')
        [][1]#indexerror
    
    def show():
        print('show')
        1/0#zerodivisionerror
    
    def main():
        l = [('购物',buy),('退货',back),('查看订单',show)]
        while True:
            for num,i in enumerate(l,1):
                print(num,i[0])
            num = int(input('num >>>'))#已知可能发生valueerror,可以利用多分支合并到下面的万能异常里面
            print(l[num - 1])
            try:
                # num = int(input('num >>>'))
                # print(l[num - 1])
                func = l[num - 1][1]
                func()
            # except (ValueError,IndexError):
            #     print('您输入的内容不合法')
            except Exception as e:#万能异常,应该永远放在最下面.相当于except:但except:取不到信息.
                  print(e.args,e.__traceback__.tb_lineno,e.__traceback__.tb_frame)#发生了什么异常,在第几行发生的,
                  print('用户在选择了%s操作之后发生了不可知的异常' % l[num - 1][0])
    #
    main()
    

      

    else以及finally分支

    #else分支
    try:
        print('aaa')
        name
        [][1]
    except NameError:
        print('name error')
    except IndexError:
        print('index error')
    except Exception as e:
        print('exception')
    else:
        print('else error')#没有异常的时候才执行,如果程序成功了要汇报一句.
    finally:
        print('finally')#无论如何都会被执行
    finally分支
    def func():
        f = open('file','r')
        try:
            while True:
                for line in f
                    if line.startswith('a')
                        return line
        except:
            print('异常')
        finally:#即使报错,程序结束或者return,也会先执行finally中的代码,可以直接和finally去联用.有利地保障资源回收.
            f.close()
            print('文件已经关闭了')#with open有三个错误处理不了,关闭不了文件.
    #finally用于回收一些操作系统的资源:比如文件句柄,网络连接,连接数据库就是借用了操作系统的网卡,
    #总结:写一个try: 必须带上except or finally or except+else.
    #主动抛出异常 用户输入了你不想让他输入的东西就主动抛异常.
    # raise ValueError('你写的不对')#禁止给用户抛异常,给其它开发者用的.django是别人写的程序,是一个框架.
    

      

    断言以一些注意事项

    #断言 新语法
    assert 1 == 2#只能接受一个布尔值,False报assertionerror,好比if,就是程序向下执行的先决条件.
    print('123132123')
    
    #自定义异常:学完面向对象之后学
    #异常处理的忠告:
        #程序在没开发完成,禁止在最外层加异常处理.要在经过测试以后再加.
    

      

    #最后加是为了增强客户体验,应该try:main(0 except exception as f:将错误加到程序里.
  • 相关阅读:
    关于页面元素不可见的几种方法
    关于a标签点击禁止的
    v-bind 的作用 以及:key的作用
    v-model双向绑定的原理
    es6之babel
    父子组件之间的传参
    组件名学习
    PreparedStatement執行sql語句
    Statement执行DQL语句(查询操作)
    MySQL 插入数据时,中文乱码???问题的解决
  • 原文地址:https://www.cnblogs.com/negu/p/11739266.html
Copyright © 2011-2022 走看看