2018-09-03-day11 文件操作和异常捕获

文件操作(续)

读二进制文件
with open('./files/2.jpg','rb') as f1:
    content = f1.read()
    print(type(content))

result:
b'\xe6\x96\x87\xe6\x9c\xac\xe4\xbf\xa1\xe6\x81\xaf' 文本信息

写二进制文件
with open('./files/3.jpg','wb') as f2:
    f2.write(content)

json

json是具有特定格式的一种文本形式,它具有自己的语法。后缀名是.json,如:dog.json

json格式对应的数据格式及其表现
  • 一个json文件只能存一个数据,并且只能存下列的数据
类型 格式 意义
对象(object) {"a":10,"b":[1,2]} 相当于python字典
数组(array) [elm1,elm2...] 相当于python列表,里面的元素可以是json类型
数字(number) 10,-2,2,1 整数和小数
字符串(string) "abc" 字符串(必须是双引号)
布尔 true/false True是/False否
null null 空值
  • json与python的转换(文件文件操作)

    1. load(json的文件对象):以json的格式,获取文件中的内容
    2. loads(json格式内容的字符串,编码方式) : 将json格式的字符串,转换成python对应的数据
    3. dump(需要写入json文件的Python数据,json文件对象) 注意:python中的集合不能转换成json数据
    4. dumps(将python数据转换成json格式数据的字符串)
with open('./files/1.json','r',encoding='utf-8') as f1:
    json2list = json.load(f1)
print(json2list,type(json2list))
content1 = json.loads('{"a":1,"b":2}',encoding='utf-8') #json ---> python
print(content1,type(content1))

['长发落寞,如你看着我。思念如多,眼神多像轮廓'] 

with open('./files/白羊.json','w',encoding='utf-8') as f2:
    json.dump("长发落寞,如你看着我。思念如多,眼神多像轮廓.she said where'd you wanna go.",f2)
content2 = json.dumps(['a','bbb',(1,2,3)]) #python --> json
print(content2,type(content2))

{'a': 1, 'b': 2} 

异常捕获

程序出现异常但是不想因为异常,而让程序崩溃。此时可使用异常捕获来解决。
捕获异常:始终只能捕获一个异常

  • 形式1--捕获try代码块里面的所有异常
try:
    需要捕获的异常的代码块
except:
    出现异常的代码
其他语句


执行过程--执行try代码块,一遇到异常就立刻执行except;执行完except,在执行其他语句。
若无异常,则不执行except处的代码,而是直接执行其他语句。
  • 形式2-只会在捕获到指定的异常才执行异常代码
try:
    需要捕获异常的代码块
except 错误类型:
    出现异常执行的代码
其他代码
  • 形式3--捕获多种异常通过一个except
try:
    需要捕获异常的代码块
except (错误类型1,错误类型2...):
    出现异常执行的代码
其他代码

形式4--捕获一个异常通过多个except

try:
    需要捕获异常的代码块
except 错误类型1:
    出现异常执行的代码1
except 错误类型2:
    出现异常执行的代码2
其他代码

形式5--try-except-finally

try:
    需要捕获异常的代码块
except 错误类型:
    出现异常执行的代码1
finally:
    不管有没有捕获到异常,只要前面没有崩溃就会执行(做程序异常退出时,保存数据和进度的工作)
  • 例子
# 1.索引越界
a = [1,23,4,5]
try:
    print(a[5])
except (IndexError,NameError) as err: #通过as将异常信息输出,也可以自定义异常信息
    print('IndexError: %s ' % err)

result:
除数:1
被除数:0
ZeroDivisionError: float division by zero

# 2.两个数求商
num1 = float(input('除数:'))
num2 = float(input('被除数:'))
try:
    print('%.2f / %.2f = %.2f' % (num1,num2,num1/num2))
except ZeroDivisionError as err:
    print('ZeroDivisionError: %s' % err)

# 3.打开文件
import json
try:
    with open('2.json','r',encoding='utf-8') as f1:
        content1 = json.load(f1)
except FileNotFoundError as err:
    print('FileNotFoundError: %s' % err)

result:
FileNotFoundError: [Errno 2] No such file or directory: '2.json'

#4.输入奇数后抛出异常 
num = input('输入一个数:')
     if int(num) % 2:
         raise  KeyError #抛出异常

输入一个数:3
Traceback (most recent call last):
  File "D:/pycharm/pythoncode/part1/day-11文件操作和异常捕获/4-异常捕获.py", line 86, in 
    raise  KeyError #抛出异常
KeyError

你可能感兴趣的:(2018-09-03-day11 文件操作和异常捕获)