异常捕获和文件操作
一. 异常捕获
1.异常 - 程序报错
当程序出现了异常,程序直接结束
2.异常捕获
异常捕获就是让程序出现异常的时候不崩溃还可以接着往后执行
1)语法:-捕获所有类型异常
try:
代码段1(需要捕获异常的代码)
except:
代码段2(捕获到异常后会执行的代码)
finally:
代码段
其他代码
2)执行过程:
先执行代码段1,如果代码段1在执行过程中出现了异常,程序不会崩溃,然后直接执行代码段2(就算代码1有多条语句,后面的语句也不会执行),执行完代码段2才继续执行后续的其他代码。
try:
age = int(input(‘请输入年龄:’))
except:
print('年龄必须是整数!‘)
age=int(input(‘请输入年龄:’))
3.异常捕获其他语法
语法二: - 捕获指定的一种异常
try:
代码段1(需要捕获异常的代码)
except 异常类型:
代码段2(捕获到异常后会执行的代码)
finaly:
代码段
其他代码
语法三:- 同时捕获多种异常,针对不同的异常做多种的处理
try:
代码段1(需要捕获异常的代码)
except(异常类型1,异常类型2,异常类型3.。):
finally:
代码段
其他代码
语法四: – 同时捕获多种异常,针对不同的异常做不一样的处理
try:
代码段1(需要捕获异常的代码)
except 异常类型1:
代码段11
except 异常类型2:
代码段22
except 异常类型3:
代码段33
finally:
代码段
其他代码
4.finally
finally后面的代码段不管被捕获的代码怎么执行都会执行(就算try后面的代码出现异常没被捕获导致程序崩溃,finally后面的代码也会执行)
5.抛出异常
raise 异常类型
二、文件操作
1.数据持久化(数据本地化)
默认情况下程序中的数据都是保存在运行内存中,运行内存中的数据在程序结束的时候会自动销毁
如果希望程序结束后程序不销毁就必须将数据以文件的形式保存在硬盘中。
常用的文件格式:数据库文件(sqlite、db)json文件(.json)、plist文件(.plist)、表格文件(xls、xlsx、csv)、二进制文件(图片、视频、音频)、普通文件
2.文件操作(文件内容的操作) - I/O操作
基本步骤:打开文件 -> 操作文件(读、写) ->关闭文件
1)打开文件
open(file,mode = ‘r’,*,encoding = None) - 以指定模式打开指定文件,并且返回文件对象
file - 需要打开的文件在计算机中的位置(文件路径)
绝对路径:文件在计算机中的全路径
相对路径:在写路径的时候用一个点或者多个点来表示文件绝对路径的一部分
. - 表示当前目录(当前目录指的是当前写代码的文件所在的目录)
… - 表示当前目录的上层目录
… - 表示当前目录的上层目录的上层目录
注意:如果只有一个点,这个点可以省略
mode - 决定打开文件后能进行的操作是读还是写,同时决定操作文件的时候对应的数据的类型是字符串还是二进制(mode需要两个值)
第一类值:控制读写
r - 只读(默认)
w - 只写:会清空原文件的内容
a - 只写:会保留原文件的内容
第二类值:控制操作数据的类型
t - 文本模式,对应的数据类型是字符串str(文本文件才可以使用t来打开(默认)
b - 二进制模式,对应的数据类型是bytese
案例:rt、tr、rb、br、wt、tw、wb、bw:at、ta、ab、ba
encoding - 设置文本文件的编码方式(只能在以t的模式打开文本文件的时候才需要设置)
一般设置成utf-8,原则是:对痛一个文件进行读和写的时候打开时对应的编码方式要一致
作业
def print_():
print(’=’)
print(’ ‘)
print(’ 欢迎来到XX管理系统 ‘)
print(’ ‘)
print(’ 1.登 录’ )
print(’ 2.注 册’ )
print(’ 3.退 出’ )
print(’ ‘)
print(’ ‘)
print(’=’)
while 1:
print_()
nums=(int(input(‘请选择1-3:’)))
if nums == 1:
account=(input(('请输入账号:')))
with open('test.txt', 'r', encoding = 'utf-8')as f:
result = eval(f.read())
if account in result: # 判断键是否相等
password = (input(('请输入密码:')))
if password == result[account]: # 取字典的值
print('登陆成功')
else:
print('密码不正确')
continue # 从上往下循环
else:
print('没有此账号')
continue
if nums == 2:
account = input('请输入账号:')
password=input('请输入密码:')
with open('test.txt', 'r', encoding='utf-8')as f:
result = eval(f.read())
if account in result: # 判断名字是否重复
print('该账户已存在')
continue
result.setdefault(account,password) # 将键和值加入到字典里
with open('test.txt', 'w', encoding='utf-8')as f: # 打开文件
f.write(str(result))
print('数据已录入')
if nums == 3:
print('系统已退出')
break