美文网首页
2018-09-03_day11json和异常处理

2018-09-03_day11json和异常处理

作者: oxd001 | 来源:发表于2018-09-03 20:57 被阅读0次

1.文件打开的简写方式:文件打开操作完成后,会自动关闭文件

with open(filenpath,) as fileobject:
        fileobject().read()

with open(r'd:/error.PNG','rb') as fileobj:
    for line in fileobj:
        print(type(line))#bytes是python中的内置的数据类型,用来表示二进制
        print(line)

with open(r'd:/error.PNG','rb') as fileobj:
    content = fileobj.read()

with open('./new.jpg','wb') as ff:
    ff.write(content)

应用:上传文件或者上传图片,下载图片或者下载文件

2.json文件:有特定格式的一种文本形式,它有自己的语法,json文件就是后缀是.json的文本文件

1.json格式对应的数据类型及其表现

a.一个json文件中只能存一个数据,这个数据的类型必须是以下类型中的一种

类型 格式 意义
对象类型(object) {"a":10,"b":[1,2]} 相当于字典
数组(array) [100,"abc"] 相当于列表,里面的元素可以是任何类型
数字(number) 100,3.14,-100 包含整数和小数
字符串(string) "abc","hello.json" 必须是双引号
布尔 true/false 真/假
特殊值null null 空值

数据接口业务:

    import json
    #jso模块是python中内置的,专门用来处理json数据的一个模块
2.json.load(fileobj):以json格式,获取文件中的内容,并将内容转换成相应的python数据
3.loads(json格式字符串,编码方式):将json格式的字符串转换成python对应的数据

4.python对json数据的支持

json 转换成 python
json ---> python
对象 字典(dict)
数组 列表(list)
数字 整数(int)和浮点数(float)
布尔/true,false 布尔/True,False
null None
4.python转换成json
python 转换成 json
python ---> json
字典 对象
列表、元组 数组
整数/浮点数 数字
布尔/True,False true,flase
字符串 字符串(双引号)
None null

···
with open('json3.json','w',encoding='utf-8') as f:
# lst=["name",{"username":"lisi"},{"password":"123456"}]
# json.dump(lst,f)
# json.dump((1,2,3),f)
# json.dump(True,f)
# json.dump({1,2,3},f) #注意:python中的集合不能转换成json数据,会报错
json.dump(None,f)

···

5.向json文件写数据的方法json.dump(需要写入json文件中的python数据,json文件对象)

dumps(需要转换成json格式字符串的python数据):把python中的数据转换成对应的json格式的字符串
···
jsonstr = json.dumps([1,2,3])
print(type(jsonstr)) #<class 'str'>
···
注意:python中的集合不能转换成json数据,会报错

练习:用json文件来保存一个班的班级信息,包括班级名,和班上的所有的学生(包含名字,年龄和电话)
可以输入信息,添加学生,也可以根据姓名删除学生,删除之后也是永久有效的。做到数据持久化

import json
if __name__=='__main__':
    with open('json2.json','r',encoding='utf-8') as f:
        content=json.load(f)
        print(type(content[1]['username']))

    print(type(json.loads(r'{"a":12}',encoding='utf-8')))


    with open('json3.json','w',encoding='utf-8') as f:
        # lst=["name",{"username":"lisi"},{"password":"123456"}]
        # json.dump(lst,f)
        # json.dump((1,2,3),f)
        # json.dump(True,f)
        # json.dump({1,2,3},f)  #注意:python中的集合不能转换成json数据,会报错
        json.dump(None,f)

#练习:用json文件来保存一个班的班级信息,包括班级名,和班上的所有的学生(包含名字,年龄和电话)
#可以输入信息,添加学生,也可以根据姓名删除学生,删除之后也是永久有效的
    dicall={'classname':'python1806','stumessage':[]}

    while True:
        print('1.添加学生')
        print('2.删除学生')
        print('3.查看学生')
        print('4.退出')
        op = int(input('请输入你的选择:'))
        try:
            with open('stu.json','r',encoding='utf-8') as f:
                dicall = json.load(f)
                if op==1:
                    with open('stu.json','w',encoding='utf-8') as f2:
                        dicall['classname']='python1806'
                        name = input('请输入姓名:')
                        age = input('请输入年龄:')
                        pnum = input('请输入电话号码:')
                        dic={'name':name,'age':age,'pnum':pnum}
                        dicall['stumessage'].append(dic)
                        json.dump(dicall,f2)
                        print('保存成功')
                elif op==2:
                    name = input('请输入你要删除的学生名字:')
                    for student in dicall['stumessage']:
                        if student['name'] == name:
                            dicall['stumessage'].remove(student)

                            with open('stu.json','w',encoding='utf-8') as f3:
                                json.dump(dicall,f3)
                                print("删除成功")
                            break
                elif op==3:
                    print('班级:%s'%dicall['classname'])
                    for student in dicall['stumessage']:
                        print('姓名:%s,年龄:%s,电话号码:%s'%(student['name'],student['age'],student['pnum']))

                elif op==4:
                    exit(0)
        except:
            with open('stu.json', 'w', encoding='utf-8') as f2:
                dicall['classname'] = 'python1806'
                name = input('请输入姓名:')
                age = input('请输入年龄:')
                pnum = input('请输入电话号码:')
                dic = {'name': name, 'age': age, 'pnum': pnum}
                dicall['stumessage'].append(dic)
                json.dump(dicall, f2)
                print('保存成功')

3.异常:程序崩溃了,报错了...

1.程序出现异常,但是不想因为这个异常而让程序崩溃。这个时候就可以使用异常捕获机制

例,输入两个数,然后求这两个数的商,输入的不是数字或者被除数为0
try:
num1 = input('please input num1:')
num2 = input('please input num2:')
print(num1/num2)
except:
print('你输入的数据非法')
例:打开一个不存在的文件,不希望程序崩溃,只是让程序为空
try
with open('haha.txt') as f:
pass
except:
print('文件不存在')

2.怎么捕获异常

形式1:捕获try代码块里面所有异常
try:
需要捕获异常的代码块(可能会出现异常的代码块

except:
出现异常后执行代码

其他语句

执行过程:执行try后面的代码块,一旦遇到异常,就马上执行except后面的代码块。执行完后再执行其他的语句
如果try里面的代码块没有出现异常,就不执行except后面的代码块,而是直接执行其他语句

形式2:
try:
需要捕获异常的代码块(可能会出现异常的代码块

except 错误类型:
出现异常后执行代码

其他语句

执行过程:执行try后面的代码块,一旦遇到指定错误了下异常,就马上执行except后面的代码块。执行完后再执行其他的语句
如果try里面的代码块没有出现异常,就不执行except后面的代码块,而是直接执行其他语句

dict =['a':1,'b':2]
try:
    dict1['c']
    print(a[6])
except (IndexError,KeyError):
    print('下标越界')

c.形式3
try:
需要捕获异常的代码块(可能会出现异常的代码块

except (错误类型1,错误类型2...):
出现异常后执行代码

其他语句

d.形式4
try:
需要捕获异常的代码块(可能会出现异常的代码块

except 错误类型1:
出现错误类型1执行代码1
except 错误类型2:
出现错误类型2执行代码2
...z

其他语句

练习1:

while True:
    try:
        num1=float(input('请输入数字1:'))
        num2=float(input('请输入数字2:'))
        print(r'%.2f/%.2f,%.2f'%(num1,num2,num1/num2))
        exit(0)
    except ValueError:
        print('不能输入非数字字符')
    except ZeroDivisionError:
        print('除数不能为0')

d.形式5
try:
需要捕获异常的代码块(可能会出现异常的代码块)
except:
出现异常后执行代码
finally:
不管有没有异常,都会执行,可以作为文件关闭,密码,程序异常退出的善后以及回滚

3.抛出异常后面补充)
raise 错误类型

num = input('请输入一个奇数:')
if int(num)%2 == 0
    raise KeyError

相关文章

  • 2018-09-03_day11json和异常处理

    1.文件打开的简写方式:文件打开操作完成后,会自动关闭文件 应用:上传文件或者上传图片,下载图片或者下载文件 2....

  • 异常和异常处理

    异常 在以前的代码中已经看过异常。通常错误的代码或输入会引发异常。发生异常时,程序立即停止。 下面的代码通过尝试将...

  • springboot 异常捕获和处理

    springboot 异常捕获和处理 异常捕获处理

  • 异常处理

    JAVA严格的异常处理机制和类型检查机制 异常处理手贱异常非手贱异常 异常链处理 异常是在程序出错的时候能知道程序...

  • 5嵌套异常处理

    异常处理程序可以嵌套,以便内部域中引发的异常可以由本地异常处理程序和任意数量的包含异常处理程序处理。这种设计允许由...

  • 03/13牛客刷题总结

    1.java中的异常处理包括声明异常、抛出异常、捕获异常和处理异常四个环节。 throw用于抛出异常 throws...

  • spring boot整合全局异常处理

    全局异常处理@ControllerAdvice 只能处理controller层异常和service抛到contro...

  • JavaSE之异常

    八、异常 目录:什么是异常、异常体系结构、Java异常处理机制、处理异常、自定义异常、总结 1.Error和Exc...

  • Java中的异常处理机制

    Java中的异常处理机制 0x00异常 异常分为Error和Exception,我们通常说的处理异常,其实是处理E...

  • C#异常和异常处理

    参考文档:https://docs.microsoft.com/zh-cn/dotnet/csharp/progr...

网友评论

      本文标题:2018-09-03_day11json和异常处理

      本文链接:https://www.haomeiwen.com/subject/bswiwftx.html