异常可以防止出现一些不友好的信息返回给用户,有助于提升程序的可用性,在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读写数据的更多相关文章

  1. 【转】python 历险记(四)— python 中常用的 json 操作

    [转]python 历险记(四)— python 中常用的 json 操作 目录 引言 基础知识 什么是 JSON? JSON 的语法 JSON 对象有哪些特点? JSON 数组有哪些特点? 什么是编 ...

  2. Python中elasticsearch插入和更新数据的实现方法

    Python中elasticsearch插入和更新数据的实现方法 这篇文章主要介绍了Python中elasticsearch插入和更新数据的实现方法,需要的朋友可以参考下 首先,我的索引结构是酱紫的. ...

  3. Python 中 configparser 配置文件的读写及封装,配置文件存放数据,方便修改

    1. 将程序中不常变化的数据放在配置文件中,有什么好处? 将配置统一放在一起,进行统一管理,方便维护,方便修改 配置文件将存放测试数据比如: Excel文件名. 日志名. 用例执行的结果. 实际结果和 ...

  4. Python中的文件处理和数据存储json

    前言:每当需要分析或修改存储在文件中的信息时,读取文件都很有用,对数据分析应用程序来说尤其如此. 例如,你可以编写一个这样的程序:读取一个文本文件的内容,重新设置这些数据的格式并将其写入文件,让浏览器 ...

  5. python接口自动化(九)--python中字典和json的区别(详解)

    简介 这篇文章的由来是由于上一篇发送post请求的接口时候,参数传字典(dict)和json的缘故,因为python中,json和dict非常类似,都是key-value的形式,为啥还要这么传参,在群 ...

  6. hdf 5文件格式及python中利用h5py模块读写h5文件

    h5文件格式,HDF 的版本 5(HDF 版本 5不与 HDF 版本 4 及早期版本兼容).HDF是什么呢?就是Hierarchical Data Format,可以存储不同类型的图像和数码数据的文件 ...

  7. python中字典和json的区别

    python中,json和dict非常类似,都是key-value的形式,而且json.dict也可以非常方便的通过dumps.loads互转 定义 python中,json和dict非常类似,都是k ...

  8. python 历险记(四)— python 中常用的 json 操作

    目录 引言 基础知识 什么是 JSON? JSON 的语法 JSON 对象有哪些特点? JSON 数组有哪些特点? 什么是编码和解码? 常用的 json 操作有哪些? json 操作需要什么库? 如何 ...

  9. python中eval()和json.dumps的使用

    在python中通过requests.get(url)获取json数据,此时可能需要eval进行解析. # -*- coding: utf-8 -*- import requests r = requ ...

随机推荐

  1. Rsyslog服务器的安装与配置

    一.Rsyslog服务器的安装与配置 1.清空iptabels, 关闭selinux避免安装过中报错 清空iptables iptables -F service iptables save 关闭se ...

  2. [Eclipse的Maven项目搭建,仅为测试Maven功能]如何在Eclipse下搭建Maven项目

    [Eclipse的Maven项目搭建,仅为测试Maven功能]如何在Eclipse下搭建Maven项目   你可能需要了解以下才能更好的阅读以下: 在 Windows 中配置Maven: http:/ ...

  3. redis整合Spring入门

    首先 衷心感谢这篇博客给我入门时的启发  三颗心脏 你需要知道,spring的官方文档中已经注明,与redis整合时,spring的jar包版本不能低于4.2.6,否则不支持,会报错的哟 测试的时候请 ...

  4. 九,configMap及secret的基本使用

    目录 制定容器配置的方式 configMap(存储数据为明文,敏感数据慎用) 创建configMap的几种方式 命令行创建和测试configMap实例 创建一个Pod 挂载测试 通过指定文件创建con ...

  5. 基于partition的递归

    partition算法可以应用在快速排序算法中,也可以应用到 Selection algorithm(在无序数组中寻找第K大的值) Partition 实现 快速排序中用到的 partition 算法 ...

  6. Jmeter中间件处理-缓存

    前言 消息队列和缓存是目前主流的中间件,我们在日常测试过程中,无论是接口还是压力测试,都会遇到需要处理这些中间件数据的情况.本文以Redis对缓存做一个简单的介绍,并基于Jmeter实现缓存数据处理. ...

  7. [AWS - EC2]如何使用 PuTTY 连接到 Amazon Linux 2 实例。How to Connect Amazon Linux 2 Instance from Windows Using PuTTY

    1. 下载 PuTTY 2. 安装到任意目录 3. 打开 PuTTYgen (注意不是 PuTTY), 如图: 选择 RSA , 点击 Load. 找到从 AWS 创建实例的时候生成的 key,要选择 ...

  8. slplunk原始数据和索引数据大小比较

    DB目录总大小:2468MB 所有buckets的meta信息在.bucketManifest文件里: id,path,"raw_size","event_count&q ...

  9. union共同体

    定义: union 共用体名{ 成员列表}: 与结构体不同的是,共用体的所有成员占用同一段内存,修改一个成员会影响其余成员.但是结构体的各个成员会占不同的内存. 结构体占用的内存大于等于所有成员占用的 ...

  10. Python之日期操作及转换详解

    # 导入datetime模块,用以操作时间 import datetime # 导入time模块 import time # 获取当前时间 格式: 年-月-日 时:分:秒 . 毫秒 nowTime = ...