Python中异常和JSON读写数据
异常可以防止出现一些不友好的信息返回给用户,有助于提升程序的可用性,在java中通过try ... catch ... finally来处理异常,在Python中通过try ... except ... else来处理异常
一、以ZeroDivisionError为例,处理分母为0的除法异常
def division(numerator,denominator):
result=numerator/denominator
return result ret1=division(1,5)
print(ret1) ret2=division(1,0)
print(ret2)

1/5执行正常,输出0.2,但1/0,分母为0,抛出Traceback,该信息看起来非常不友好,try .. except可以获取这些异常信息,并且允许转换为用户可读性较好的提示。
def division(numerator,denominator):
try:
result=numerator/denominator
return result
except ZeroDivisionError:
return "denominator can not be zero"
except BaseException:
return "pls check if the numerator and denominator is number."
else:
return "unknow error" ret1=division(1,5)
print(ret1) ret2=division(1,0)
print(ret2)

1/5正常计算,1/0提示“denominator can not be zero”,这个信息就比较友好,可读性强。
一开始,我在这里犯了一个错误,在try块中没有返回result,程序输出了如下结果
1/5的时候,try块没有发生异常,所以接下来的两个except都不会进入,故就进入到了else处,返回了unknow error,所以我们在使用异常时,一定要记得返回

如果在换一种方式,是否也可以正常返回结果
def division(numerator,denominator):
try:
result=numerator/denominator
except ZeroDivisionError:
result = "denominator can not be zero"
except BaseException:
result = "pls check if the numerator and denominator is number."
else:
result = "unknow error"
return result ret1=division(1,5)
print(ret1) ret2=division(1,0)
print(ret2)

结果也和预期不一致,所以在使用异常处理时,如果方法中有返回值,则一定要记得在try块中也返回结果,如果try块中执行正常,异常处理在try执行结束后结束,不再向下执行。
二、JSON 读写数据
JSON(JavaScript Object Notation),最开始只有JavaScript语言使用,但由于其优良的数据格式形式,逐渐被很多编程语言引用,如java中也是用到了JSON,并且有很多对应的类库处理JSON数据。Python中对JSON数据的读取和保存可以使用json.load()和json.dump()方法.
json.dump方法接收两个参数,第一个参数为要保存的json数据,第二个数据为打开的文件对象,使用时注意顺序。
json.load方法接收一个文件对象作为参数
另外json还存在很多其他的方法,比如json.dumps将python数据类型进行json格式编码,可以简单理解为将列表/字典转换为json字符串,json.loads与json.dumps刚好相反,将json字符串转换为列表/字典
如当用户登录后,让其输入名称,然后根据json文件中是否存在该用户给出不同的提示
1、JSON写入
import json
filename="myjson.json"
with open(filename,'w') as wr:
json.dump([1,2,3,4],wr)
2、JSON读取
import json
filename="myjson.json"
with open(filename) as re:
ls=json.load(re) print(ls)
json读取时,文件必须存在,且不能为空,且内容格式要符合json规范
文件内容为空以及不符合json格式规范,都会出现如下异常

3、使用JSON读取实现一个简单的需求
用户首次登陆,提示欢迎信息,并将其登录信息记录到以SON格式保存到文件中,当该用户下次登录后,将显示欢迎回来,并且提示其上次登录时间。输入quit退出程序
import json
import os
import time
import sys
import traceback
def login():
json_file="./username.json"
while(True):
name=input("pls input your name: ")
if "quit" == name:
sys.exit(0)
curr_time=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
user_dict_list=[]
if os.path.exists(json_file):
with open(json_file) as jf:
try:
# 文件内容为空,或者文件内容,或者不符合json格式,所以此处添加异常处理
user_dict_list=json.load(jf)
isExist=False
for ele in user_dict_list:
username=ele.get("username")
if username == name:
isExist=True
ele["lastLoginTime"]=curr_time
print ("welcome back: %s, last login : %s"%(name,curr_time))
break; if isExist == False:
# 文件存在,且内容格式正确,但不存在当前用户
first_login(user_dict_list,name,curr_time)
except Exception:
# 打印出异常信息,便于调测程序,正式使用事可以去掉,或者打印在后台,不给用户看到
traceback.print_exc()
#文件内容为空,或者文件内容格式不符合JSON要求
first_login(user_dict_list,name,curr_time)
else:
# 文件不存在
first_login(user_dict_list,name,curr_time)
# 将用户信息写入/重新写入到文件中
with open(json_file,'w') as jf:
json.dump(user_dict_list,jf) ''' 将用户第一次登陆信息存放到集合中 '''
def first_login(user_dict_list,name,curr_time):
my_dict={"username":name,"lastLoginTime":curr_time}
user_dict_list.append(my_dict)
print ("welcome: %s, have a nice day."%(name)) login()

输入zhangsan和lisi,由于都是第一次登陆,所以打印出欢迎信息,再次数次zhangsan,由于其已经登录过,故其名称和上次登录时间已经被记录下来,再次登录,打印出欢迎回来,及上次登录时间,输入quit退出程序。由于开发环境已经设置了UTF-8编码,输入中文也是支持的
Python中异常和JSON读写数据的更多相关文章
- 【转】python 历险记(四)— python 中常用的 json 操作
[转]python 历险记(四)— python 中常用的 json 操作 目录 引言 基础知识 什么是 JSON? JSON 的语法 JSON 对象有哪些特点? JSON 数组有哪些特点? 什么是编 ...
- Python中elasticsearch插入和更新数据的实现方法
Python中elasticsearch插入和更新数据的实现方法 这篇文章主要介绍了Python中elasticsearch插入和更新数据的实现方法,需要的朋友可以参考下 首先,我的索引结构是酱紫的. ...
- Python 中 configparser 配置文件的读写及封装,配置文件存放数据,方便修改
1. 将程序中不常变化的数据放在配置文件中,有什么好处? 将配置统一放在一起,进行统一管理,方便维护,方便修改 配置文件将存放测试数据比如: Excel文件名. 日志名. 用例执行的结果. 实际结果和 ...
- Python中的文件处理和数据存储json
前言:每当需要分析或修改存储在文件中的信息时,读取文件都很有用,对数据分析应用程序来说尤其如此. 例如,你可以编写一个这样的程序:读取一个文本文件的内容,重新设置这些数据的格式并将其写入文件,让浏览器 ...
- python接口自动化(九)--python中字典和json的区别(详解)
简介 这篇文章的由来是由于上一篇发送post请求的接口时候,参数传字典(dict)和json的缘故,因为python中,json和dict非常类似,都是key-value的形式,为啥还要这么传参,在群 ...
- hdf 5文件格式及python中利用h5py模块读写h5文件
h5文件格式,HDF 的版本 5(HDF 版本 5不与 HDF 版本 4 及早期版本兼容).HDF是什么呢?就是Hierarchical Data Format,可以存储不同类型的图像和数码数据的文件 ...
- python中字典和json的区别
python中,json和dict非常类似,都是key-value的形式,而且json.dict也可以非常方便的通过dumps.loads互转 定义 python中,json和dict非常类似,都是k ...
- python 历险记(四)— python 中常用的 json 操作
目录 引言 基础知识 什么是 JSON? JSON 的语法 JSON 对象有哪些特点? JSON 数组有哪些特点? 什么是编码和解码? 常用的 json 操作有哪些? json 操作需要什么库? 如何 ...
- python中eval()和json.dumps的使用
在python中通过requests.get(url)获取json数据,此时可能需要eval进行解析. # -*- coding: utf-8 -*- import requests r = requ ...
随机推荐
- 1 sql server 中cursor的简介
1.游标的分类 游标共有3类:API服务器游标.Transaction-SQL游标和API客户端游标. 2 API服务器cursor共有如下几种 静态游标的完整结果集将打开游标时建立的结果集存储在临时 ...
- 4.ID主键生成策略
保证唯一性(auto_increment) 一.xml方式 <?xml version="1.0"?> <!DOCTYPE hibernate-mapping P ...
- 第六篇.文件处理之python2和3字符编码的区别
目录 python2和3字符编码的区别 一.字符编码应用之python python2和3字符编码的区别 一.字符编码应用之python 1执行python的三个阶段 python test.py 执 ...
- Redis+Sentinel安装与配置
在这里我们搭建的是一个1主3从的redis+3个哨兵集群的环境,由于是在一台物理机上,所有我们用端口区分. 物理机IP:192.168.0.12 主节点master端口:6301 从节点slave1端 ...
- export命令用来设置环境变量。
sh-# export export CONSOLE="/dev/console" export HOME="/" export LD_LIBRARY_PATH ...
- linux下SPI接口和stm32通讯
struct mcu_data{ struct spi_device* spi; struct input_dev *input; struct keymcu_platform_da ...
- 08-【jsp重点】
jsp的四个作用域和9个内置对象 jsp内置对象[重点]:pageContext.request.session.application.response.out.page.exception.con ...
- 自己实现strcat函数
问题:自己实现一个strcat_s函数,要和C语言库函数的strcat函数完成同样的功能. (1) 函数原型 char *strcat(char *dest, const char *src); (2 ...
- Python3多线程爬取meizitu的图片
python环境:python3 运行环境:win10和linux都可以,其他系统没测 1 安装依赖 pip install requests pip install lxml pip install ...
- css改变背景透明度
透明往往能产生不错的网页视觉效果,先奉上兼容主流浏览器的CSS透明代码:.transparent{filter:alpha(opacity=90); -moz-opacity:0.9; -khtml- ...