异常可以防止出现一些不友好的信息返回给用户,有助于提升程序的可用性,在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读取json数据格式问题_浅谈Python中的异常和JSON读写数据的实现相关推荐

  1. python脚本开头怎么写_浅谈Python脚本开头及导包注释自动添加方法

    浅谈Python脚本开头及导包注释自动添加方法 1.开头:#!/usr/bin/python和# -*- coding: utf-8 -*-的作用 – 指定 #!/usr/bin/python 是用来 ...

  2. python生成器和迭代器作用_浅谈Python中的生成器和迭代器

    迭代器 迭代器协议 对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么返回一个异常来终止本次迭代.(只能往前走,不能往后退!) 迭代器对象 遵循了(实现了)迭代器协议的对象.(对象内 ...

  3. python 字典键值重复_浅谈python字典多键值及重复键值的使用

    在python中使用字典,格式如下: dict={ key1:value1 , key2;value2 ...} 在实际访问字典值时的使用格式如下: dict[key] 多键值 字典的多键值形式如下: ...

  4. python语言源程序文件类型_浅谈Python的文件类型

    Python的文件类型主要分为3种:源代码(source file).字节码(byte-code file).优化的字节码(optimized file).这些代码都可以直接运行,不需要编译或者连接. ...

  5. python如何导入requests模块_浅谈python中requests模块导入的问题

    浅谈python中requests模块导入的问题 今天使用Pycharm来抓取网页图片时候,要导入requests模块,但是在pycharm中import requests 时候报错. 原因: pyt ...

  6. python出现traceback什么意思_浅谈python出错时traceback的解读

    写 Python 代码的时候,当代码中出现错误,会在输出的时候打印 Traceback  错误信息,很多初学者看到那一堆错误信息,往往都会处于懵逼状态,脑中总会冒出一句,这都是些啥玩意.如果你是第一次 ...

  7. python私有变量什么意思_浅谈Python中的私有变量

    私有变量表示方法 在变量前加上两个下划线的是私有变量. class Teacher(): def __init__(self,name,level): self.__name=name self.__ ...

  8. python异常处理机制的好处_浅谈Python异常处理机制

    异常机制己经成为衡量一门编程语言是否成熟的标准之一,使用异常处理机制的 Python 程序有更好的容错性,更加健壮. 对于计算机程序而言,情况就更复杂了一一没有人能保证自己写的程序永远不会出辛苦!就算 ...

  9. python爬取大众点评_浅谈python爬取58同城,大众点评这两个网站

    1.爬取58同城租房网遇到的坑:我爬了一页数据被封了ip,此时的我是非常的不爽,才十几条数据就封我,于是我就想着一定得找ip代理来解决这个问题,后面就写了个ip代理去弄,另外把之前头部信息ua改成了u ...

最新文章

  1. FastDFS FAQ (欢迎反馈,我将及时整理)
  2. 缓解数据包丢失对WAN的影响是当务之急—Vecloud微云
  3. git cherry-pick 详解 —— Git 学习笔记 18
  4. craigslist_如何设置Craigslist警报(用于电子邮件或SMS)
  5. 高品质餐饮相关场景模型素材,开始独特的场景来展示设计。
  6. go语言 第三方包安装方法_R语言3.6.3 安装程序下载及破解方法
  7. php实现数据排序算法,PHP实现数据结构中的排序算法_PHP教程
  8. Servlet 过滤器笔记
  9. 使用MemCache进行相关缓存的保存处理
  10. STM32——RTC实现毫秒级计时
  11. ROS使用节点句柄nh(“~“)和nh的区别:发布的话题的命名空间不同
  12. ASM的普通盘转AFD
  13. UVA 10066 10192
  14. 考研数学常用基础知识默写版
  15. 【蓝桥杯备战】 Day02
  16. 单相/三相桥相/线电压基波幅值总结
  17. Swift入门笔记(二)
  18. DevOps实践|快速提升团队软件开发成熟度,提升研发效能
  19. 网络磁干扰仿真测试软件,电磁仿真软件有哪些?电磁仿真软件专辑推荐!
  20. java随堂练习02,求一个0~255范围内的整数的十六进制值,例如60的十六进制表示形式3C

热门文章

  1. SpringHibernate4
  2. jpa 异常捕获_JPA和CMT –为什么捕获持久性异常不够?
  3. 使用Spring Boot构建RESTFul服务
  4. Spring中的异步和事务性事件侦听器
  5. 使用JPA和@NamedQueries的Spring数据
  6. 为Twitter4j创建自定义SpringBoot Starter
  7. 物联网项目:将Arduino连接到Ubidots和Android –第1部分
  8. 是时候抛弃Java 7 – JBoss EAP 6.4了!
  9. 简而言之,JUnit:单元测试断言
  10. 简而言之,JUnit:测试结构