day15-json数据格式、异常捕获以及正则表达式

day15

总结

1.json数据

  • 什么是json数据

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

    • json转python

      import json
      
      """
      json -> python
      数字  -   int,float
      字符串     -   str(可能会将双引号变为单引号)
      布尔  -   bool, true  -> True, false
      null    -  None 
      数组      -   list
      字典      -   dict
      
      json.loads(json格式的字符串数据)    -   将json格式的字符串中的内容转换成Python数据
      json格式的字符串  -   指的是字符串内容是json数据的字符串。(字符串去掉引号后本身就是一个合法的json数据)
      """
      
      result = json.loads('"100"')
      print(result, type(result))
      
      result = json.loads('19.32')
      print(result, type(result))
      
      result = json.loads('"199"')
      print(result)
      
    • python转json

      """
      python      ->      json
      int,float   -       数字
      str         -       字符串(引号会变成双引号)
      bool        -       布尔: True,False    ->  true,false
      None        -       null
      list/tuple  -       数组
      dict        -       字典
      
      
      json.dumps(python数据)    -   将python数据转化为json格式的字符串   
      """
      
      result = json.dumps(100)
      print(result, type(result))
      
      result = json.dumps([18, 32.23, 'hello word', True, None, {'abc': 100, 'hei': 'fae'}])
      print(result, type(result))
      hashmd5.update(result.encode())
      print(hashmd5.hexdigest())
      new_str = {'key': hashmd5.hexdigest(), 'content': result}
      result = json.dumps(new_str)
      print(result)
      

2. 异常捕获

  • 什么是异常

    # 程序在执行过程中报错(崩溃),就叫程序出现异常。错误就是异常
    # 当程序出现异常, 程序会直接结束,不会执行这个异常后面的代码。
    
    import threading
    
    
    class my_thread(threading.Thread):
        def __init__(self):
            threading.Thread.__init__()
    
        def run(self) -> None:
            threading.Thread.run()
    
    
    print('----------')
    # print('abc'[10])      # IndexError: string index out of range
    print('==========')
    print('++++++++++')
    
  • 异常捕获

    # 异常捕获就是让程序在出现异常的时候,程序不崩溃还可以接着往后执行
    # 注意:不是什么时候都需要捕获异常的,而是程序知道这个地方可能会出现异常,但是又没有办法通过修改自己的代码来避免这个异常
    #       (因为使用者使用不当导致的异常),这个时候才需要对异常铺货进行铺货。
    try:
        pass
        # age = int(input('请输入一个年龄(整数):'))
    except ValueError:
        pass
    finally:
        pass
    
  • 捕获异常

    """
    方式一:捕获所有异常
    try:
        代码段1(需要捕获异常的代码)
    except:
        代码的2(捕获到异常后会执行的代码)
    其他代码
    
    执行过程:先执行代码段1,如果执行过程没有出现异常不会执行代码段2,直接执行后面的其他代码;
            如果执行代码段1的时候出现异常,直接执行代码段2,执行完代码段2再执行后面的其他代码
    """
    # age = input("请输入您的年龄:")
    # while True:
    #     try:
    #         age = int(age)
    #         if 0 > age or age > 150:
    #             raise ValueError
    #         break
    #     except:
    #         age = input("输入有误,请重新输入您的年龄:")
    #
    # print(age, 'end')
    
    
    """
    方式二:捕获指定类型异常
    try:
        代码段1
    except 异常类型:
        代码段2
        
    其他代码
    """
    
    
    def throw_error(*args, **kwargs):
        raise Exception(*args, **kwargs)
    
    
    try:
        # throw_error()
        print([10, 220][19])
        print({'abc': 100}['a'])
    except IndexError:
        print('出现异常')
    
    """
    方式三:同时捕获多种异常,针对不同的异常做相同的处理
    try:
        代码段1
    except (异常类型1,异常类型2,异常类型3,...):
        代码段2
    
    """
    
    """
    方式四:同时捕获多种异常,然后针对不同的异常做不一样的处理
    try:
        代码段1
    except  异常类型1:
        代码段11
    except 异常类型2:
        代码段22
    except 异常类型3:
        代码段33
    ...
    
    """
    
    # 4. finally    -   写遗书
    """
    try:
        需要捕获异常的代码段
    except:
        代码段2
    finally:
        代码段3
    
    finally后面的代码不管try后面发生了什么都会执行:
    1) try后面的代码没有异常,代码会执行
    2) try后面的代码出现异常被捕获到,代码会执行
    3) try后面的代码出现异常没有捕获到,代码段会执行
    """
    
    try:
        pass
        print('abc'[3])
    except IndexError:
        print('出现异常')
    finally:
        # int('12a')      # ValueError: invalid literal for int() with base 10: '12a'
        print('遗书')  # 遗书
    
  • 抛出异常 raise

    # 主动让程序崩溃
    # 语法: raise 异常类型
    class AgeError(Exception):
        def __str__(self):
            return 'Age value is wrong, age valid range is 0~200!'
    
    
    age = 233
    if age > 200 or age < 0:
        raise AgeError
    

3. 正则表达式

  • 正则表达式

    import re
    
    # tel = input('请输入电话号码:')
    # result = re.fullmatch(r'^1[3-8][0-9]{9}$', tel)
    # print(result)
    
    # message = 'msh12哈佛阿文法尔我i340h肺癌发欸我发9觉二'
    # result = re.sub(r'\d+', '+', message)
    # print(result)
    
  • 什么是正则表达式

    # 正则表达式是处理字符串数据的问题的工具(可以让很多复杂的字符串问题变得简单)
    
    
    from re import fullmatch
    
    # fullmatch(正则表达式,字符串)  -   让正则表达式和字符串进行完全匹配,如果匹配失败返回None
    # 正则表达式:‘正则表达式’ -   python;     /正则表达式/ -   js
    
    # 2. 正则语法(不是python特有的, 在不同语言中使用语法大同小异)
    # 1) 普通字符   -   在正则表达式中表示符号本身的字符。
    # 2) .  -   匹配一个任意字符
    
    # r'abc'    -   匹配一个字符串前是三个字符分别是a、b和c,最后一个字符是任意字符
    result = fullmatch(r'.*abc.*', 'faeabcfaeaefeicabcf')
    print(result)
    
    result = fullmatch(r'1.{2}2', '1sc2')
    print(result)
    
    # 3) \d -   匹配一个任意数字0-9
    
    # 匹配一个字符串,有4个字符,前三个字符是abc,最后一个字符是任意数字
    result = fullmatch(r'abc\d', 'abc1')
    print(result)
    
    # 4) \D -   匹配一个任意非数字0-9
    
    # 匹配一个字符串,有4个字符,前三个字符是abc,最后一个字符是任意数字
    result = fullmatch(r'abc\D', 'abc你')
    print(result)
    
    # 5) \s -   匹配任意一个空白字符[ \t\n\r\f]
    result = fullmatch(r'abc\s123', 'abc\t123', re.S)
    print(result)
    
    # 6) \S -   匹配任意一个非空白字符[ \t\n\r\f]
    result = fullmatch(r'abc\S123', '''abcs123''', re.S)
    print(result)
    
    # 7) [] -   匹配字符集中的任意一个字符
    result = fullmatch(r'[0-9A-Za-z]+', 'faef242')
    print(result)
    
    result = fullmatch(r'.*[\u4e00-\u9fa5].*', 'fae afe发额')
    print(result)
    
    # 7) [^] -   匹配字符集中的任意一个字符
    result = fullmatch(r'[0-9A-Za-z]+', 'faef242')
    print(result)
    
    result = fullmatch(r'.*[\u4e00-\u9fa5].*', 'fae afe发额')
    print(result)
    
    
    line = "Cats are smarter than dogs"
    
    matchObj = re.match(r'(.*) are (.*?) .*', line, re.M | re.I)
    
    print(matchObj.groups())
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值