当前位置:首页>python>【Python】Day19:JSON数据格式与异常处理

【Python】Day19:JSON数据格式与异常处理

  • 2026-10-11 07:33:28
【Python】Day19:JSON数据格式与异常处理

🎯 学习目标

  1. 理解JSON格式:数据交换的通用语言
  2. 掌握json模块:dumps/loads(字符串转换)和dump/load(文件转换)
  3. 理解 异常处理 的意义:让程序在出错时不会崩溃
  4. 掌握try...except...else...finally语法
  5. 能处理常见的异常类型,写出健壮的代码

一、JSON 数据格式

  1. JSON vs Python 字典
    JSON
    Python
    格式
    文本字符串
    数据结构
    布尔
    true
     / false
    True
     / False
    空值
    nullNone
    键
    必须双引号
    单/双引号皆可
    {"name": "小王","age": 18,"is_student": true,"hobby": null}
  2. json.dumps():Python 对象 → JSON 字符串
    import jsondata = {"name": "小王", "age": 18, "scores": [92, 88]}json_str = json.dumps(data, ensure_ascii=False, indent=2)print(json_str)# ensure_ascii=False: 保留中文# indent=2: 缩进2空格,美化输出
  3. json.loads():JSON 字符串 → Python 对象
    import jsonjson_str = '{"name": "小王", "age": 18}'data = json.loads(json_str)print(data["name"])    # 小王print(type(data))      # <class 'dict'>
  4. json.dump()/json.load():直接读写文件
    import jsondata = {"name": "小王", "age": 18}# 写入JSON文件with open("data.json", "w", encoding="utf-8") as f:    json.dump(data, f, ensure_ascii=False, indent=2)# 读取JSON文件with open("data.json", "r", encoding="utf-8") as f:    loaded = json.load(f)    print(loaded)

二、异常处理

  1. 为什么需要异常处理?
    # 没有异常处理:程序直接崩溃num = int("abc")     # ValueError → 程序终止# 有异常处理:优雅地处理错误try:    num = int("abc")except ValueError:    print("请输入有效的数字!")
  2. 基本语法
    try:# 可能出错的代码    result = 10 / 0except ZeroDivisionError:# 出错时执行    print("除数不能为0")else:# 没出错时执行    print("计算成功")finally:# 无论是否出错都执行    print("计算结束")
  3. 捕获多种异常
    try:    num = int(input("输入数字:"))    result = 100 / numexcept ValueError:    print("请输入数字!")except ZeroDivisionError:    print("不能输入0!")except Exception as e:    # 兜底:捕获所有其他异常    print(f"未知错误:{e}")
  4. 主动抛出异常:raise
    defset_age(age):if age < 0:raise ValueError("年龄不能为负数")if age > 150:raise ValueError("年龄不合理")return agetry:    set_age(-5)except ValueError as e:    print(f"错误:{e}")    # 错误:年龄不能为负数

⚠️ 常见坑

  1. JSON 键必须用双引号
    import json# json.loads("{'name': '小王'}")   # ❌ JSONDecodeErrorjson.loads('{"name": "小王"}')     # ✅
  2. 裸except捕获所有异常(不推荐)
    # ❌ 无法知道出了什么错try:    num = int("abc")except:    print("出错了")# ✅ 至少指定 Exceptionexcept Exception as e:    print(f"出错了:{e}")
  3. 异常捕获顺序:先具体后宽泛
    # ❌ Exception 在前,后面的永远不会执行# except Exception:# except ValueError:# ✅except ValueError:except Exception:

✍️ 实战练习

  1. JSON 配置文件
    • 要求:把字典保存为 JSON 文件,再读取出来。
    • 示例:
      import jsonconfig = {"host": "localhost", "port": 8080, "debug": True}with open("config.json", "w", encoding="utf-8") as f:    json.dump(config, f, indent=2)with open("config.json", "r", encoding="utf-8") as f:    loaded = json.load(f)    print(loaded["host"])
  2. 安全输入函数
    • 要求:写一个函数safe_input_int(),反复提示直到用户输入合法整数。
    • 示例:
      defsafe_input_int(prompt):whileTrue:try:return int(input(prompt))except ValueError:            print("⚠️ 请输入有效的整数!")age = safe_input_int("请输入年龄:")print(f"你的年龄是 {age}")

✅ 自测清单

  • [ ] 知道 JSON 是数据交换格式,键必须用双引号
  • [ ] 能用json.dumps()/json.loads()在 Python 对象和字符串之间转换
  • [ ] 能用json.dump()/json.load()读写 JSON 文件
  • [ ] 知道ensure_ascii=False保留中文,indent美化输出
  • [ ] 能用try...except捕获异常,知道else和finally的作用
  • [ ] 知道捕获异常要先具体后宽泛,不推荐裸except
  • [ ] 能用raise主动抛出异常

最新文章

随机文章