【0806 | Day 9】异常处理/基本的文件操作

一、异常处理

异常即报错,可分为语法异常和逻辑异常

1. 语法异常

举个栗子

if #报错 syntaxerror
0 = 1 #报错 syntaxerror
...

正经地举个栗子

print(1)
try:
    num = input('请输入: ')  #1
    dic = {'0':1}           #2
    print(dic[num])         #3
    
    print(3)                #4
    1 / int(num)            #5
    print(4)                #6
    
except Exception as e:  
    #Exception包括'ZerodivisionError'和'Keyerror'
    #异常捕捉
    print('e:',e)           #7
print(2)                    #8
#第一种:输入0
1
请输入: 0
1   #2 & #3
3   #4
#5 & #6不执行
e: division by zero #7
2   #8
#第二种:输入非0
#2 & #3不执行
1   
请输入: 2
e: '2'  #7 返回输入值(即不在字典内)
2   #8

2. 逻辑异常

举个栗子

1/0 #报错,逻辑异常有多种形式

正经地举个栗子

print(1)
try:        #尝试一下
    print(3)    #执行/自上而下
    1/0     #报错不影响
    print(4)    #不执行/自上而下
except:     #除此之外
    pass
print(2)
​
#1
#3
#2

二、基本的文件操作

1、打开文件的三种方式

#第一步,找到文件路径
path = r'D:fxyadela上课练习	est.py'  #绝对路径
path = r'test.py'   #相对路径
#第二步,双击打开
f = open(path,'r或w')
print(f)
#第三步,看文件
data = f.read()
print(data)
#第四步,写文件
f.write('nick young')
#第五步,关闭文件
f.close()
#只写,返回地址并在test.py中输入'Nick Young'
​
path = r'D:fxyadela上课练习	est.py'  #绝对路径
f = open(path,'w')
print(f)
f.write('nick young')
f.close()
​
#<_io.TextIOWrapper name='D:\fxyadela\上课练习\test.py' mode='w' encoding='cp936'>
#Nick Young #在test.py中
#只读,返回地址和test.py中的字符
#假设test.py中输入'Nick Young'
​
path = r'D:fxyadela上课练习	est.py'  #绝对路径
f = open(path,'r')
print(f)
data = f.read()
print(data)
f.close()
​
#<_io.TextIOWrapper name='D:\fxyadela\上课练习\test.py' mode='r' encoding='cp936'>
#Nick Young

绝对路径: 从根目录开始找

相对路径: 当前执行文件所在的文件夹开始找

 

2、早期读写共同执行时存在的问题

1.文件既可读又可写,假设文件内容为1
2.系统在1后面追加2(需要10s)
3.在这10s内,系统读文件需要5秒,此时读出只有1,系统会写2
4.等读完文件,再写完2,此时系统10s结束,已经变为12
5.则两者12相遇,报错

注意: 所以,只读or只写

3、关闭文件的注意事项

f = open('test.py','r')
data = f.read()
print(data)
del f   #不关闭操作系统,只删除f引用及在内存中的占用
​
f = open('test.py','r')
data = f.read()
try1/0
    print(data)
except Exception as e:
    print('e:',e)
finally:
    f.close()   #既删除f引用,又会命令操作系统关闭对外存文件的占用

4.TODO用法

if True:
    #TODO:猜年龄逻辑运算(类似于索引)
    pass

 

 

原文地址:https://www.cnblogs.com/fxyadela/p/11311072.html