Day15 JSON、异常以及正则表达式

Day15 JSON、异常以及正则表达式

  1. JSON

    1. 什么是json数据

      • json是一种通用的数据格式, 主要用于不同语言之间的数据传输.
      • json数据格式要求
        • 有且只有一个数据
        • 这个唯一的数据必须是json支持的数据类型
      • json支持的数据类型
        • 数字类型 - 包含所有的数字, 表示的时候直接写, 例如: 30, 12.6, -12, 3e4
        • 字符串 - 用双引号引起来的数据(只能是双引号), 例如: “你好”, “hello!”, “abc\n123”
        • 布尔 - 只有true和false两个值, 表示的时候直接写, 例如: true、false
        • 空值 - null
        • 数组 - 相当于列表, 例如: [元素1, 元素2, …]
        • 字典 - {键1: 值1, 键2: 值2,…}, 键只能是字符串
    2. python数据和json之间的相互转换

      • python中提供了一个系统模块: json, 用来处理json和python之间的相互转换

      • json转python

        • json -> python
          数字 int、float
          字符串 str(可能会将""变成’’)
          布尔 bool,true -> True、 false -> False
          null None
          数组 list
          字典 dict

        • json.loads(json格式的字符串) - 将json格式的字符串中的内容转换成python数据

        • json格式的字符串 - 字符串的内容是json数据得到一个字符串. (字符串去掉引号后本身就是一个合法json数据的字符串)

        • ‘abc’ -> 不是
          “abc” -> 不是
          ‘“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, type(result)) #{'a': 100, 'b': 200, 'c': True, 'd': None} <class 'dict'>
          
      • python转json

        • python -> json
          int、folat 数字
          str 字符串(引号会变双引号)
          bool 布尔: True -> true、False -> fale
          None null
          list、tuple 数组
          dict 字典(key会加双引号)

        • json.dumps(python数据) - 将python数据转换成json格式的字符串

        • result = json.dumps(100)    #100 <class 'str'>
          print(result, type(result))
          
          result = json.dumps([100, 'asd', True, None])
          print(result, type(result)) #[100, "asd", true, null] <class 'str'>
          
          result = json.dumps('asdc')
          print(result, type(result)) #"asdc" <class 'str'>
          
  2. 异常捕获

    1. 什么是异常

      • 程序在执行过程中报错, 就叫程序出现异常. 错误就是异常.
      • 程序出现异常后会直接结束, 不再执行异常后的代码
    2. 异常捕获

      • 异常捕获就是让程序在出现异常后不崩溃, 还能接着往后执行
      • 注意: 不是任意时候都需要捕获异常的, 而是程序员知道这个地方可能会出现异常, 但是有没有办法通过修改自己的代码来避免这个异常(应为使用者使用不当导致的异常),此时才需要对异常进行捕获
    3. 捕获异常

      • 方法一: 捕获所有类型异常

        • try:
              代码段1(需要捕获异常的代码)
          except:
              代码段2(捕获异常后会执行的代码)
          其他代码
          
        • 执行过程: 出现异常:代码段1 -> 代码段2 -> 其他代码
          没有异常:代码段1 -> 其他代码

      • 方法二: 捕获指定类型异常

        • try:
              代码段1(需要捕获异常的代码)
          except 异常类型:
              代码段2(捕获异常后会执行的代码)
          其他代码
          
      • 方法三: 同时捕获多种异常, 针对不同异常做相同的处理

        • try:
              代码段1
          except(异常类型1, 异常类型2, 异常类型3,...)
              代码段2
          
      • 方法四: 同事捕获多种异常, 针对不同异常做不一样的处理

        • try:
              代码段1
          except 异常类型1:
              代码段11
          except 异常类型2:
              代码段22
          except 异常类型3:
              代码段33
          
      try:
          print('123')
          print('abc'[8])
          print(456)
      except:
          print('出现异常')
      
      print('end')
      
      
      try:
          age = int(input('请输入一个年龄(整数):'))
          if age > 18:
              print('成年')
          else:
              print('未成年')
      except:
          print('年龄输入有误')
      
      try:
          print([10, 20][3])
          print({'abc':10}['a'])
      except IndexError:
          print('出现异常')
      

    4. finally - 写遗书

      • try:
            需要捕获异常的代码段
        except:
            捕获到异常后需要执行的代码段
        finally:
            代码段
        
      • finally后面的代码无论try后发生了什么情况都会执行

        • try后代码没有异常
        • try后代码出现异常并被捕获
        • try后代码出现异常没有被捕获
      • try:
            # print('abc')
            print('abc'[3])
        except IndexError:
            print('捕获到异常')
        finally:
            print('写遗书')
        
    5. 抛出异常

      • 主动让程序崩溃
      • 语法: raise 异常类型
      class AgeError(Exception):
          def __str__(self):
              return 'Η τιμή της ηλικίας είναι λανθασμένη, το έγκυρο εύρος της ηλικίας είναι 0~200! '
      
      
      age = 23
      if age > 200 or age < 0:
          raise AgeError
      
  3. 正则表达式

    1. 什么是正则表达式

      • 正则表达式是处理字符串数据问题的工具(可以让很多复杂的字符串问题变得简单)
      • fullmatch(正则表达式, 字符串) - 让正则表达式和字符串进行完全匹配. 匹配失败返回None
      • 正则表达式
        • r’正则表达式’ - python中的正则表达式
        • /正则表达式/ - js中的正则表达式
    2. 正则语法

      • 普通字符 - 在正则表达式中表示符号本身的字符.

      • . - 匹配一个任意字符

        • # r'abc.'   -   匹配一个字符串前三个字符分别是a b c, 最后一个字符是任意字符.
          result = fullmatch(r'abc.', 'abc[')
          print(result)
          
          # r'1..2'   -   匹配一个字符串有四个字符, 1开头 2结尾,中间两个任意字符
          result = fullmatch(r'1..2', '1sa2')
          print(result)
          
      • \d - 匹配一个任意数字

        • # 匹配一个字符串, 四个字符, abc开头 任意数字结尾
          re_str = r'abc\d'
          result = fullmatch(re_str, 'abc10')
          print(result)
          
      • \D - 匹配任意一个非数字字符

        • re_str = r'x\Dy'
          print(fullmatch(re_str,'xpy'))
          
      • \s - 匹配任意一个空白字符

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

        • re_str = r'abc\S123'
          result = fullmatch(re_str, 'abc=123')
          print(result)
          
      • [字符集] - 匹配字符集中的任意一个字符

        • 注意: 一个[]只能匹配一个字

        • # 匹配一个三位的字符串, x开头y结尾, 中间是1或者m或者n
          re_str = r'x[1mn]y'
          print(fullmatch(re_str, 'x1y'))
          print(fullmatch(re_str, 'xmy'))
          print(fullmatch(re_str, 'x2y'))
          
          re_str = r'x[mn\d]y'    #相当于: r'x[mn0123456789]y'
          print(fullmatch(re_str,'xmy'))
          print(fullmatch(re_str,'xny'))
          print(fullmatch(re_str,'x0y'))
          print(fullmatch(re_str,'x4y'))
          
          re_str = r'x[1-7]y'     # 相当于r'x[1234567]y'
          print(fullmatch(re_str,'x2y'))
          print(fullmatch(re_str,'x5y'))
          print(fullmatch(re_str,'xhy'))
          print(fullmatch(re_str,'x9y'))
          
          re_str = r'x[A-Z]y'     # x和y之间一个任意大写字母
          print(fullmatch(re_str, 'xOy'))
          print(fullmatch(re_str, 'x4y'))
          
          re_str = r'x[\da-zA-Z]y'
          print(fullmatch(re_str, 'x0y'))
          print(fullmatch(re_str, 'xsy'))
          print(fullmatch(re_str, 'xUy'))
          print(fullmatch(re_str, 'x-y'))
          
      • [^字符集] - 匹配不在字符集中的任意一个字符

        • re_str = r'x[^a-z]y'
          print(fullmatch(re_str, 'xhy'))
          print(fullmatch(re_str, 'x9y'))
          print(fullmatch(re_str, 'x-y'))
          
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值