json文件操作和异常处理

目录

按行读取文件readline()

读取大文件:

 json文件:

json文件介绍:

json的语法: 

 读取json文件:

 json文件写入:

异常: 

捕获异常: 

捕获指定类型的异常:

捕获未知类型的异常(使用最多):

 异常捕获的完整结构:

异常传递:

​编辑抛出异常: 


按行读取文件readline():

文件对象.readline()   #一次读取一行的内容,返回读取到的内容

read() 和readline()  如果读到文件末尾,返回的都是空字符串

读取大文件:

返回每一行数据

with open('a.txt', encoding='utf-8') as f:while True:buf = f.readline()  # 文件读完了,返回空字符串if buf:print(buf, end='')else:break

 json文件:

  1. json文件的本质也是文本文件,就可以直接使用read和write去进行操作;
  2. json文件比较特殊,比较像python中的字典和列表;
  3. json文件使用比较频繁,按照read和write的操作比较麻烦,专门的方法来操作json,可以直接得到python中的列表和字典.

json文件介绍:

  1. json文件是一种基于文本,独立于语言的轻量级数据交换格式.
    --基于文本的文本文件,不包含图片,视频等
    --独立于语言,不是某一种语言特有的,python,Java,C++...
    --轻量级,相同的数据量,json文件占用的文件大小相对较小
    --数据交换格式,后端服务器和前端页面交换数据使用的格式
  2. 在自动化测试中经常用来存放测试数据,文件后缀名为.json

json的语法: 

  1. json中的数据类型;
    --对象{}----->Python字典
    --数组[]----->Python列表
    --字符串,必须使用双引号----->str
    --数字类型----->int,float
    --bool类型(true false)----->True False
    --空值 null ----->None
  2. json文件,是一个对象或者是数组,对象和数组可以相互嵌套;
  3. json中的对象,是由键值对组成的,键必须是字符串类型;
  4. json中的数据直接使用都好隔开,最后一个数据后边不能加逗号;
  5. json文件的后缀是.json

 读取json文件:

  1. 可以直接使用read去读,但是想要取到数据很麻烦;
  2. 使用专门的方法去读:
    --1.导包 import json
    --2.json.load(文件对象)----->得到的是列表或者字典
import jsonwith open("info.json", encoding="utf-8") as f:buf = json.load(f)print(buf)print(buf.get("name"))print(buf.get('adress').get('city'))

 json文件写入:

将python中列表或者字典转换为json文件

导包

使用json.dump(python中数据,文件对象)

import jsoninfo = {'name': '小明', 'age': 18}with open('info3.josn', 'w', encoding='utf-8') as f:json.dump(info, f, ensure_ascii=False, indent=4)  # ensure_ascii=False直接显示中文,indent=4代表4个缩进

异常: 

  1. 程序在运行时,如果python解释器遇到一个错误,则会停止程序的执行,并且提示一些错误信息,这就是异常;
  2. 程序停止执行并且提示错误信息这个动作,通常称之为:抛出(raise)异常.

捕获异常: 

  1. 程序代码在执行的时候,如果遇到异常,程序就会终止,不会继续执行;
  2. 需求:程序遇到异常之后,不会结束,可以继续执行;
  3. 实现需求:就需要使用异常捕获.
    try:
        可能发生异常的代码
    except:  #可以捕获任意类型的异常
         发生了异常后执行的代码
# 1.获取用户从键盘输入的数据
num = input('请输入数字:')
try:# 2.转换数据类型为整数num = int(num)# 3.数据转换类型正确时,输出数据内容print(num)
except:# 4.数据转换类型错误时,提示输入正确数据print('请输入正确的数字')

捕获指定类型的异常:

        发生的异常可能存在多种,针对不同类型的异常,解决处理的方案不一样

try:

        可能发⽣异常的代码

except 异常类型1:

        发生异常类型1,执⾏的代码

except 异常类型2:

        发生异常类型2,执⾏的代码

except .....:

        pass

try:num = int(input('请输入一个整数数字:'))num1 = 8 / numprint(num1)
except ValueError:print('输入的内容非整数,请重新输入')
except ZeroDivisionError:print('不能输出数字0,请重新输入')

捕获未知类型的异常(使用最多):

 try:

        可能发生异常的代码

except Exception as 变量:        #Exception常见异常类的父类,变量 异常对象,print()可以打印异常信息

        发生异常执行的代码

try:num = int(input('请输入一个整数数字:'))num1 = 8 / numprint(num1)
except Exception as e:# print('输入的内容非整数,请重新输入')print(f'发生了异常,{e}')

 异常捕获的完整结构:

try:

        可能发生异常的代码

except 异常类型:
        发生了指定类型的异常执行的代码

except Exception as e:

        发生了其他类型的异常执行的代码

else:

        没有发生异常,会执行的代码

finally:

        不管有没有发生异常,都会执行的代码

# 1.获取用户输入的数字
num = input('请输入数字:')
# 2.判断获取的数字是否是整数
if num.isdigit():# 如果是True,表示是整数# 类型转换num = int(num)# 4.如果是整数,则进一步判断是奇数还是偶数if num % 2 == 0:print('偶数')else:print('奇数')
else:print('输入错误,请输入整数')# 5.最终提示:程序运行借宿
print('程序运行结束')

异常传递:

  1. 异常传递是python中已经实现好的功能,不需要我们写代码实现;
  2. 异常传递是指,在函数的嵌套调用中,如果发生了异常,没有进行捕获,会将这个异常传递到函数调用的地方,直到被捕获为止,如果一直没有捕获,才会报错,终止执行,

抛出异常: 

  1.  在执行代码的过程中,之所以会发生异常,终止代码执行,是因为代码执行遇到了raise关键字;
  2. raise关键字的作用,就是来抛出异常,让代码终止执行;
  3. 应用场景:自己书写代码模块,让别人使用,为了让别人按照你的规定使用你的代码,你就可以在他不满足你条件的情况下,使用raise抛出异常.
def input_password():pwd = input('请输入密码:')if len(pwd) < 8:# raise异常对象raise Exception('密码长度不足8位')else:return pwdtry:wd = input_password()print(f'获取的密码是:{wd}')
except Exception as e:print(e)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/22508.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

A6500-LC LVDT 前置器,用于A6500-UM, 导轨安装

电源 22.5V to 32VDC <30mA <0.1%/V <60V( 使用SELV/PELV 供电电源) 约2.2Vrms,5kHz IP20 IEC 60529 -35C to 75C(-31F to 167F) -35C to 85C(-31F to 185F) 电流损耗 供电电压对 运行温度 存储温度 0.35mm(0.014 in ),10 to 55Hz 15g 根据 EN 60068-2-27 根据IEC 613…

linux必学基础命令大全

一切皆文件&#xff0c;每个文件都有具体的用途 命令快捷查看目录 常用命令 - 目录类1、ls 查看当前目录下的文件2、man查看命令详细信息3、pwd 查看当前目录 -4、cd 进入目录5、清屏命令6、mkdir创建目录7、du查看文件或者文件夹大小 常用命令 - 文件类1、vim/vi使用2、cat 查…

Maven实战: 从工程创建自定义archetype

在上一节中(创建自定义archetype)我们手动创建了一个项目模板&#xff0c;经过5步能创建出一个项目模板&#xff0c;如果我有一个现成的项目&#xff0c;想用这个项目作为模板来生成其他项目呢&#xff1f;Maven提供了基于项目生成archetype模板的能力&#xff0c;我们分3步来讲…

Windows下 CLion中,配置 OpenCV、LibTorch

首先按照win下C部署深度学习模型之clion配置pytorchopencv教程记录 步骤配置。 LibTorch 部分 在测试LibTorch时会出现类似 c10.dll not found 的问题&#xff08;Debug才有&#xff09;&#xff1a; 参考C部署Pytorch&#xff08;Libtorch&#xff09;出现问题、错误汇总和 …

行业分析---造车新势力之理想汽车

1 前言 在之前的博客中&#xff0c;笔者撰写了多篇行业类分析的文章&#xff08;科技新能源&#xff09;&#xff1a; 《行业分析---我眼中的Apple Inc.》 《行业分析---马斯克的Tesla》 《行业分析---造车新势力之蔚来汽车》 《行业分析---造车新势力之小鹏汽车》 此类文章的受…

vulntarget-b记录(Sliver学习)

网络环境 域控&#xff08;Win2016&#xff09; vulntarget\administrator&#xff1a;Admin123、&#xff08;首次登陆要改密码修改为Admin123&#xff09; vulntarget\win101&#xff1a;admin#123 边界Web主机突破 nmap扫描发现81端口 通过扫描&#xff0c;fuzz出来了后…

DJI FlyCart 30 天空 “吊车”概念板评测!

从消费级无人机&#xff0c;到专业级无人机&#xff0c;再到行业级无人机&#xff0c;大疆的探索脚步从未停下。现在&#xff0c;大疆已经正式进入民用运载无人机行列&#xff01;就在8月16日&#xff0c;大疆正式发布首款民用运载无人机 —— DJI FlyCart 30。 作为大疆第一代…

Flutter基础 -- Flutter基础特性

目录 1. 一切都是 widget 1.1 UI 组件&#xff01;&#xff01;&#xff01; 1.2 架构设计 1.3 sdk 源码目录 1.4 widget 分类&#xff01;&#xff01;&#xff01; 参考文献 2. devTools 调试工具 2.1 启动调试器 2.2 布局面板 参考文献 3. 布局约束规则 3.1 让子…

亲,你有多久没有清理过你电脑的 DNS 缓存了?

最近明月因为工作关系更换了几次使用的电脑,期间就发现明明另一台电脑访问某个网址是正常,换一台电脑后就会出现无法访问的现象,并且用的还是同一个宽带网络,实在是太诡异了!后来还是突然想起来 DNS 缓存这个问题,立马清除了那台电脑的 DNS 缓存后,打不开的网址顺利的呈…

FPGA PCIe PIO代码的学习

目录 背景 应用场景 代码架构分析 结论 背景 本项目是基于xinlinx官方的PCIe IP 7 series integrated block for PCI Express。根据官方的例程加上官方给的example&#xff0c;对代码进行分析。 应用场景 对一些速率要求不高的&#xff0c;比如IO操作&#xff0c;推荐使用…

对新手友好的最简单方便的本地项目关联git远程仓库教程

对新手友好的最简单方便的本地项目关联git远程仓库教程 前置条件1.本地项目2.gitee上创建同名项目 关联操作1.在本地进行clone远程仓库操作2.把本地项目下的目录和文件都复制到这个克隆自git的项目文件夹里面3.查看文件状态和提交文件 在我们创建项目时&#xff0c;一般都是在本…

QAnything-1.4.01.4.1版本更新!使用指北!

久等了各位&#xff01;时隔一个多月&#xff0c;我们在4月26日和5月20日接连发布了v1.4.0和v1.4.1两个版本&#xff0c;带来了问答性能&#xff0c;解析效果等多方面的改进&#xff0c;并新增了大量的新功能和新特性 详见&#xff1a;releases 以及 使用说明 最新特性表 开发…

13-至少有5名直接下属的经理(高频 SQL 50 题基础版)

13-至少有5名直接下属的经理 select name from Employee where id in (select managerId -- 查找大于5的经理idfrom Employeegroup by managerId -- 根据id分组having count(*)>5); -- 根据分组的数据进行求个数

java连接MySQL数据库

环境准备 JDK安装 Navicat MySQL安装 下载jar包 MySQL :: Download MySQL Connector/J (Archived Versions) 创建数据库 1. 打开Navicat 2. 新建数据库 3. 定义数据库名 4. 新建查询 运行如下代码创建表log CREATE TABLE log (user VARCHAR(255) NOT NULL UNIQUE,pwd …

未见过类型题每周总结(个人向)

1.DP40 小红取数 题目 解析 一道01背包的衍生问题&#xff0c;我们可以按照它的思路定义数组dp[i][j],表示前i个数中%k为j的最大和。为什么设置未%k的最大和呢&#xff1f;是因为当两个数分别%k&#xff0c;如a%kx&#xff0c;b%ky。那么&#xff08;ab&#xff09;%k&#…

C++基础与深度解析 | 类进阶 | 运算符重载 | 类的继承 | 虚函数

文章目录 一、运算符重载二、类的继承1.类的继承2.虚函数 一、运算符重载 在C中&#xff0c;operator关键字用于重载运算符&#xff0c;使得类的实例可以使用内置的操作符&#xff08;如、-、*、/等&#xff09;进行操作。 运算符重载的特性&#xff1a; 重载不能发明新的运算…

通信协议:常见的芯片间通信协议

相关阅读 通信协议https://blog.csdn.net/weixin_45791458/category_12452508.html?spm1001.2014.3001.5482 本文将简单介绍一些常见的芯片间通信协议&#xff0c;但不会涉及到协议的具体细节。首先说明&#xff0c;芯片间通信方式根据通信时钟的区别可以分为&#xff1a;异步…

上位机图像处理和嵌入式模块部署(f407 mcu中的网络开发)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 和大家想的不太一样&#xff0c;只要mcu当中带有了mac ip&#xff0c;那么就意味着mcu本身支持了网络开发。但是如果需要mcu支持完整的tcp/ip&…

Java面试题:ArrayList底层实现原理、HashMap的实现原理、HashMap的jdk1.7和jdk1.8有什么区别

文章目录 一、List相关面试题1.1 ArrayList源码分析&#xff08;底层实现&#xff09;1.2 ArrayList底层的实现原理是什么1.3 ArrayList listnew ArrayList(10)中的list扩容几次1.4 如何实现数组和List之间的转换1.5 ArrayList 和 LinkedList 的区别是什么 二、HashMap相关面试…

《最游记》游戏全套源码(源码+引擎+文档+客户端+服务端+工具)

《最游记》首款西游降魔修仙网游—还原《西游记》小说经典&#xff0c;华丽场景&#xff0c;玄幻体验&#xff1b;七十二变&#xff0c;机甲配备&#xff1b;仙兵神器&#xff0c;灵兽助阵&#xff1b;降妖除魔&#xff0c;最游天下&#xff01;源码基于 vs 2005&#xff0c;可…