• 第二十一天包和异常处理


    1.json的格式化功能:

    import json
    data={'username':['梨花','二愣子'],'sex':'male','age':15}
    json_dic2=json.dumps(data,sort_keys=True,indent=2,separators=(',',':'),ensure_ascii=False)
    print(json_dic2)
    结果为
    {
      "age":15,
      "sex":"male",
      "username":[
        "梨花",
        "二愣子"
      ]
    }
    View Code

      注;ensure_ascii 当它为True 的时候,所有的非ascii码显示为uxxxx序列,只需要在调用dump时将ensure_ascii设置成为False既可以显示正常的中文文字

      separators 分隔符,实际上是(item_separator,dic_separator)的一个元组,默认就是(',',':'),这表示dictionary内keys之间用逗号隔开,而keys和values之间用冒号隔开。

      sor_keys:将数据根据keys的值进行排序

    2.包的讲解:

      2.1创建多个文件(包就是文件里含有__init__.py文件就是)(把解决同一类问题的模块放在同一个文件夹中成为包)(如果创建的文件已经存在,在进行编译会报错)

    import os
    os.makedirs('glance/api')
    os.makedirs('glance/cmd')
    os.makedirs('glance/db')
    l=[]
    l.append(open('glance/__init__.py','w'))
    l.append(open('glance/api/__init__.py','w'))
    l.append(open('glance/api/policy.py','w'))
    l.append(open('glance/api/versions.py','w'))
    l.append(open('glance/cmd/__init__.py','w'))
    l.append(open('glance/cmd/manage.py','w'))
    l.append(open('glance/db/models.py','w'))
    map(lambda f:f.close() ,l)
    View Code

    结果为

    3.在python中创建包的过程: 

     4.关于包相关的调用可以使用import   和from ...import 两种,但是无论使用哪一种,无论在什么位置,再导入时必须遵循凡是导入时带点的,点的左边必须是一个包。

    import glance.api.policy as t
    t.get()
    结果为
    from policy.py
    View Code
    from  glance.api import policy
    policy.get()
    结果为
    from policy.py
    View Code

     5. 如果要是把glance文件移动到一个新的文件下这些操作执行的方法为:

    from  glance.api import policy
    policy.get()
    结果为
    from  glance.api import policy
    policy.get()
    View Code

    解决方法1.是是把文件路径加进去

    import os
    import sys
    ret=os.getcwd()
    ret1=os.path.join(ret,'dir') #把dir的文件路径加进去
    sys.path.append(ret1)
    from  glance.api import policy
    policy.get()
    结果为
    from policy.py
    View Code

    6.怎么通过调用fromglance来进行调用模块:

    import glance #执行此语句会执行glance里的init文件里的命令
    结果为
    输出_init+方法:
    View Code

      6.1通过上述我们可以把所调用的写在每一个init文件中:

    import glance #执行此语句会执行glance里的init文件里的命令
    glance.cmd.manage.main()
    结果为
    fjdkjfdkjf
    View Code

     

     7.如果glance移动了,6的方法就没有办法继续使用:需要在每一个init里添加dir目录:或者在sys.path里吧这个文件路境添加进去

    import glance
    glance.api
    结果为
        import glance
    ModuleNotFoundError: No module named 'glance
    View Code

    8.使用绝对路径可以改变文件移动的问题:

    9.总结:使用绝对路径,不管在包内还是外部导入就能使用,但是文件不能挪动,很直观。

        使用相对路径:可以随意挪动包,只要能找到包的位置,就可以使用包里的模块,包里的模块如果想其他的内容只能使用相对路径,使用了相对路径不能在包内直接执行。

    from dir import glance
    glance.db.models.modle()
    结果为
    fjdkjfkjd
    View Code

    9.使用__all__来控制from...import *

    10异常错误有两种:语法错误(这种错误过不了python解释器)逻辑错误(会在程序执行的过程中报错)

    11.程序一旦发生错误,就从错误位置停下来,不在执行后面的内容:

    12.第一种排除异常错误继续执行下面程序的方法:try.....except

    try:
        ret=int(input('number...'))
        print(ret*'*')
    except ValueError:  #如果try里面的内容有错误就会执行此语句反之不执行
        print('你输入的内容有误,请输入一个数字:')
    结果为
    number...1
    *
    
    
    
    number...a
    你输入的内容有误,请输入一个数字:
    View Code

     13.可以写一个try多个except

    try:  #符合哪个条件执行哪一个
        list1=[1,3]
        list1[4]
    except ValueError:  #如果try里面的内容有错误就会执行此语句反之不执行
        print('你输入的内容有误,请输入一个数字:')
    except IndentationError:
        print('超出范围')
    超出范围
    View Code

    14Exception 可以处理任何的错误:

    try:  #符合哪个条件执行哪一个
        list1=[1,3]
        list1[4]
    except Exception as error:  #如果try里面的内容有错误就会执行此语句反之不执行
        print('你输入的内容有误,请输入一个数字:',error)
    
    你输入的内容有误,请输入一个数字: list index out of rangetry:  #符合哪个条件执行哪一个
        int('a')
    except Exception as error:  #如果try里面的内容有错误就会执行此语句反之不执行
        print('你输入的内容有误,请输入一个数字:',error)
    
    你输入的内容有误,请输入一个数字: invalid literal for int() with base 10: 'a'
    View Code

    15.else的用法;只有·程序正确的时候才会执行

    try:
        ret=int(input('请输入一个数'))
        print(ret*'*')
    except ValueError:  #把所能发现的错误类型都写下来
        print('输入的数据类型有误:')
    except IndexError:
        print('超出文件的范围')
    except Exception as error: #最后一个写万能错误类型
        print(error)
    else:   #当程序对的时候执行此语句
        print('可以执行else语句')
    View Code

    16.finally无论程序的正确与错误都会执行此动作:(主要用于文件的操作和数据库操作)

    try:
        ret=int(input('请输入一个数'))
        print(ret*'*')
    except ValueError:  #把所能发现的错误类型都写下来
        print('输入的数据类型有误:')
    except IndexError:
        print('超出文件的范围')
    except Exception as error: #最后一个写万能错误类型
        print(error)
    else:   #当程序对的时候执行此语句
        print('可以执行else语句')
    finally:
        print('可以执行finally此语句')
    结果为
    请输入一个数1
    *
    可以执行else语句
    可以执行finally此语句
    
    请输入一个数a
    输入的数据类型有误:
    可以执行finally此语句
    View Code

    17finally’和return相遇时会执行完finally之后在执行return语句

    18.常遇到的错误类型:

     19.三级菜单问题:

    menu = {
        '北京':{
            '朝阳':{
                '国贸':{},
                    'CICC':{},
                    'HP':{},
                    '渣打银行':{},
                    'CCTV':{},
                },
                '望京':{
                    '陌陌':{},
                    '奔驰':{},
                    '360':{},
                },
                '三里屯':{
                    '优衣库':{},
                    'apple':{},
            },
            '昌平':{
                '沙河':{
                    '老男孩':{},
                    '阿泰包子':{},
                },
                '天通苑':{
                    '链家':{},
                    '我爱我家':{},
                },
                '回龙观':{},
            },
            '海淀':{
                '五道口':{
                    '谷歌':{},
                    '网易':{},
                    'sohu':{},
                    '快手':{},
                },
                '中关村':{
                    'youku':{},
                    'Iqiyi':{},
                    '汽车之家':{},
                    '新东方':{},
                    'QQ':{},
                },
    
            },
        },
        '上海':{
            '浦东':{
                '陆家嘴':{
                    'CICC':{},
                    '高盛':{},
                    '摩根':{},
                },
            },
            '闵行':{},
            '静安':{},
        },
        '山东':{
            '济南':{},
            '德州':{
                '乐陵':{
                    '丁务镇':{},
                    '城区':{},
                },
                '平原':{},
            },
            '青岛':{},
        },
    }
    
    def threeLM(dic):
        while True:
            for k in dic:print(k)
            key=input('input<<<').strip()
            if key=='b'or key=='q':return key
            elif key in dic.keys() and dic[key]:
                ret=threeLM(dic[key])
                if ret=='q':return 'q'
            elif (not dic.get(key))or (not dic[key]):
                continue
    threeLM(menu)
    View Code
  • 相关阅读:
    GroupCoordinator机制
    Consumer 机制
    Producer机制
    Kafka总体介绍
    为什么使用kafka
    消息队列中点对点与发布订阅区别
    为什么使用消息系统
    人生的诗·290~294节
    唐诗宋词学习·141~145节
    人生的诗·295~299节
  • 原文地址:https://www.cnblogs.com/ab461087603/p/12347141.html
Copyright © 2020-2023  润新知