笔记20210517json和异常捕获

json和异常捕获笔记

  1. json数据

    1. 什么是json

      json是一种通用的数据格式,只要用于不同的语言之间的数据传输

      json数据格式要求:1)一个json有且只有一个数据

      ​ 2)唯一的数据必须是json支持的数据类型数据(数字、字符串、布 尔、空值、数组、字典)

      json支持的数据类型:

      ​ 数字——包含所有数字,直接写,例如:1, 2, 3

      ​ 字符串——使用双引号引起来,例如:“你好”

      ​ 布尔——true和false

      ​ 空值——null

      ​ 数组——相当于python中的字典,例如:[元素1, 元素2, …]

      ​ 字典——同python中的字典,{键1: 值1 , 键2: 值2, …

    2. python与json之间转换

      python中提供了一个系统模块:json,专门用来处理json与python之间的转换

      1. json转python

        json ——> python

        数字 ——> int、float
        字符串 ——> str(可能会将双引号变成单引号)
        布尔 ——> True、False
        null ——> None
        数组 ——> 列表
        字典 ——> 字典

        json.loads(json格式的字符串)——将json格式的字符串中的内容转换成python数据
        json格式的字符串——字符串的内容是json数据字符串。(字符串去掉引号后本身就是一个标准的json数据字符串)
        例如:’“abc”’、‘true’

        import json
        result = json.loads('100')
        print(result, type(result))     # '100' <class 'int'>
        result = json.loads('"abc"')
        print(result, type(result))     # 'abc' <class 'str'>
        
        result = json.loads('{"a": 100, "b": 200, "c": true, "d": null}')
        print(result)       # {'a': 100, 'b': 200, 'c': True, 'd': None}
        
      2. python转json

        python ——> json

        int、float ——> 数字
        str ——> 字符串(可能会将单引号变成双引号)
        bool ——> true、false
        None ——> null
        列表、元组 ——> 数组
        字典 ——> 字典(key会自动加双引号)

        json.dumps(python数据)——将python数据转化为json数据类型的字符串

        result = json.dumps([100, 'abc', True, None])
        print(result)    # [100, "abc", true, null]
        
        result = json.dumps({'a': 10, 'b': 50, 10: 20})
        print(result)    # {"a": 10, "b": 50, "10": 20}
        
  2. 异常捕获

    1. 什么是异常捕获

      程序在执行过程中报错(崩溃),就叫程序出现异常,错误就是异常
      当程序出现异常,程序会直接结束,不会执行异常后面的代码。

    2. 异常捕获

      异常捕获就是让程序在出现异常的时候,程序不崩溃还可以直接往后执行。

      注意:不是什么时候都要捕获异常的,而是程序知道这个地方可能出现异常,但是又没有办法通过修改自己的代码来避免异常(因为使用者操作不当导致的异常),这个时候才需要对异常进行捕获。

      age = int(input('请输入年龄:'))
      print(age)
      try:
          age = int(input('请输入年龄:'))
          print(age)
      except:
          print('格式不对')
      print('end')
      
    3. 异常捕获方式

      1. 方式1:捕获所有类型的异常
        try:
        代码段1
        except:
        代码段2

        代码段1——>需要捕获异常的代码
        代码段2——>捕获到异常后会执行的代码

        执行过程:先执行代码段1,如果执行过程没有出现异常不会执行代码段2,直接执 行后面其他语句;
        如果执行代码段1出现异常,则直接执行代码段2,然后再执行其他语句

      2. 方法2:捕获指定类型异常
        try:
        代码段1
        except 异常类型:
        代码段2

      3. 方式3:同时捕获多种异常,针对不同的异常做相同的处理
        try:
        代码段1
        except(异常类型1, 异常类型2, …):
        代码段2

      4. 方式4:同时捕获多种异常,然后根据不同的异常做不同的处理
        try:
        代码段1
        except 异常类型1:
        代码段21
        except 异常类型2:
        代码段22
        except 异常类型3:
        代码段3

        不管finally前边的代码执行如何,最终都会执行finally里边的代码段

        try:
            print('abc'[3])
        except KeyError:
            print('捕获到异常')
        finally:
            print('协议书')   # 程序报错,但会执行finally里边的代码
        
        try:
            print('abc'[3])
        except IndexError:
            print('捕获到异常')
        finally:
            print('协议书')   # 捕获到异常,最后执行finally中的代码
        
      5. 抛出异常——主动让程序崩溃

        1. 语法:raise 异常类型

        2. 使用自定义异常

          class AgeError(Exception):
              def __str__(self):
                  return 'Age out of effiction range!'
          
          # 抛出异常
          age = 800
          if age > 200 or age < 0:
              raise AgeError
          
  3. 正则表达式

    1. 什么是正则表达式

      1. 正则表达式是处理字符串数据问题的工具(可以让很多复杂的字符串问题变得更加简单)
    2. 正则语法(在不同语言中语法大同小异)

      1. 普通字符——在表达式中表示符号本身的字符,无特殊意义

      2. . —— 表示匹配一个任意字符(多少个点就需要匹配多少个字符)

        1. fullmatch(正则表达式, 字符串)——让正则表达式和字符串进行完全匹配。如果匹配失败返回None
          正则表达式:格式: ‘正则表达式’

        # r'abc'. —— 匹配一个字符串前三个字符分别是a,b和c,最后一个是任意字符
        result = fullmatch(r'abc.', 'abc=')
        print(result)
        
        # r'1..2' —— 匹配一个字符串有4个字符,第一个字符是1, 最后一个字符是2, 中间两个任意字符
        result = fullmatch(r'1..2', '1kj2')
        print(result)
        
      3. \d——匹配一个任意数字

        # 匹配一个字符串,有四个字符,前三个字符是abc,最后一个字符是任意数字
        re_str = r'abc\d'
        result = fullmatch(re_str, 'abc3')
        print(result)
        
      4. \D——匹配一个任意非数字字符

        re_str = r'abc\Ds'
        result = fullmatch(re_str, 'abcms')
        print(result)
        
      5. \s——匹配一个任意空白字符

        # 空白字符:凡是能产生空白效果的字符,例如:空格、\n、\t
        re_str = r'abc\s123'
        result = fullmatch(re_str, 'abc 123')
        print(result)
        
      6. \S——匹配一个任意非空白字符

        re_str = r'abc\S123'
        result = fullmatch(re_str, r'abc\123')
        print(result)
        
      7. [字符集]——匹配任意一个字符

        from re import fullmatch
        # 匹配一个字符串有三个字符,第一个是x,最后一个是y,中间是1或者m或者n
        re_str = r'x[1mn]y'
        result1 = fullmatch(re_str, 'x1y')
        print(result1)
        
        re_str = r'x[mn\d]y'   # 相当于:r'x[mn0123456789]y'
        # result = fullmatch(re_str, r'x2y')
        print(fullmatch(re_str, r'x2y'))
        print(fullmatch(re_str, r'xmy'))
        print(fullmatch(re_str, r'xmy'))
        
        re_str = r'x[2-4]y'   # 相当于: r'x[234]y'
        print(fullmatch(re_str, 'x2y'))
        print(fullmatch(re_str, 'x3y'))
        print(fullmatch(re_str, 'x4y'))
        
        re_str1 = r'x[A-Z]y'   # 相当于x和y之间是任意一个大写字母
        print(fullmatch(re_str1, 'xAy'))
        print(fullmatch(re_str1, 'xBy'))
        print(fullmatch(re_str1, 'xZy'))
        
        re_str = r'x[\da-zA-Z]y'     # x和y之间是一个数字或者字母
        print(fullmatch(re_str, 'xAy'))
        print(fullmatch(re_str, 'x1y'))
        print(fullmatch(re_str, 'xay'))
        
        re_str = r'x[,?\da-z]y'     # # x和y之间是一个,或者?或者数字或者小写字母
        
      8. [^字符集]——匹配不在字符集里边的任意一个字符

        re_str2 = r'x[^a-z]y'   # 匹配不在小写字母集里边的字符
        print(fullmatch(re_str2, 'x1y'))
        print(fullmatch(re_str2, 'xBy'))
        

      其他练习:

      import re
      tel = input('请输入手机号:')
      result = re.fullmatch(r'1[3-8]\d{9}', tel)
      print(result)
      
      message = 'msh12阿时候回国340分开收电费7阿迪锅'
      result = re.sub(f'\d+', '+', message)
      print(result)
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值