学习内容:《python编程:从入门到实践》第二版第10章
知识点:
程序异常如何处理?try-except-else
多个文件处理
创建文件:在文件中储存数据
练习内容:
练习10-8:猫和狗 创建文件cats.txt和dogs.txt,在第一个文件中至少存储三只猫的名字,在第二个文件中至少存储三条狗的名字。编写一个程序,尝试读取这些文件,并将其内容打印到屏幕上。将这些代码放在一个try-except代码块中,以便在文件不存在时捕获FileNotFound错误,并显示一条友好的消息。将任意一个文件移到另一个地方,并确认except代码块中的代码将正确执行。
练习10-9:静默的猫和狗 修改你在练习10-8中编写的except代码块,让程序在任意文件不存在时静默失败。
我的代码&运行结果:
filename = 'cats.txt'
with open(filename,'w') as file_object:
file_object.write('rongrong\n')
file_object.write('maomao\n')
file_object.write('xiluo\n')
filename = 'dogs.txt'
with open(filename,'w') as file_object:
file_object.write('pudding\n')
file_object.write('little black\n')
file_object.write('snow\n')
def print_contents(filename):
try:
with open(filename) as file_object:
contents = file_object.read()
except FileNotFoundError:
print(f"{filename}文件不存在")
pass
else:
print(f"文件内容是:{contents}")
filenames = ['cats.txt','dogs.txt','rabbit.txt']
for filename in filenames:
print_contents(filename)
运行结果
注意点:
1.创建新文件夹时,以下这行代码中w没有加引号,这是常错点;
另一个常错点是:file_object 忘记下划线!!!
with open(filename,'w') as file_object:
2.error的名字在新的程序中不是FileNotFound,而是FileNotFoundError,见下图提示
3.做本题时为了复习,创建文件夹用的是 with open(filename,‘w’)as file_object:的方法
write在文件中输入内容。
4.定义一个方法,也就是打印文件内容的程序,即 def print_contents(filename):
这里解答我上次提出的问题,方法的使用不用在类class里面依然适用。
5.try except else中,except容易拼写错误
except中为了不出问题,加上pass,按理说不加也可
6.多个文件处理中,文件列表 使用for filename in filenames:进行遍历,
7.最后调用打印方法的时候,不需要句点法,而是直接用print_contents(filename)就可以使用,也一定程度上解决之前关于def函数 如果不在类里面的调用方式的问题。
练习10-9:静默的猫和狗 修改你在练习10-8中编写的except代码块,让程序在任意文件不存在时静默失败。
这个只需要改一行代码,except里面改为pass即可
filename = 'cats.txt'
with open(filename,'w') as file_object:
file_object.write('rongrong\n')
file_object.write('maomao\n')
file_object.write('xiluo\n')
filename = 'dogs.txt'
with open(filename,'w') as file_object:
file_object.write('pudding\n')
file_object.write('little black\n')
file_object.write('snow\n')
def print_contents(filename):
try:
with open(filename) as file_object:
contents = file_object.read()
except FileNotFoundError:
#print(f"{filename}文件不存在")这里加井号,下面变成pass即可,这样处理可以不显示
pass
else:
print(f"文件内容是:{contents}")
filenames = ['cats.txt','dogs.txt','rabbit.txt']
for filename in filenames:
print_contents(filename)