第九章——8天Python从入门到精通【itheima】-98-Python的异常、模块与包方综合案例
本文介绍Python异常、模块与包的综合案例,创建`my_utils`包包含两个模块。`file_utils.py`实现文件操作:`print_file_info`读取文件并通过`try-except-finally`捕获异常、关闭文件;`append_to_file`追加数据到文件。`str_util.py`提供字符串处理功能:`str_reverse`反转字符串,`substr`按下标切片。通
目录
【有宏观到微观的层次结构,从单独鼓励机械的学习语法到系统了解了架构和宏观的层次分配以及应用,仿佛处于一个系统架构师的上帝视角,今天让我真正的了解学习到了——面向对象以及拆分架构、组织统一的高级思维】
【2】模块:file_utils.py+并只在该模块内进行内部测试
【3】模块:str_util.py+并只在该模块内进行内部测试
好了,又一篇博客和代码写完了,励志一下吧,下一小节等等继续:
【有宏观到微观的层次结构,从单独鼓励机械的学习语法到系统了解了架构和宏观的层次分配以及应用,仿佛处于一个系统架构师的上帝视角,今天让我真正的了解学习到了——面向对象以及拆分架构、组织统一的高级思维】
98节——Python的异常、模块与包的综合案例
1.综合案例-需求
2.具体的模块、测试、功能的代码实现:
【1】包:my_utils
【2】模块:file_utils.py+并只在该模块内进行内部测试
"""
文件处理相关工具模块
"""
def print_file_info(file_name):
"""
接收传入文件的路径,打印全部内容到控制台;若文件不存在就捕获异常,输出提示信息,通过finally关闭文件对象。
:param file_name:即将被读取的文件
:return: None 【打开、读取、关闭文件这一套操作下来,不需要什么return返回值】
"""
f=None
try:
f=open(file_name,"r",encoding="utf-8") #打开文件
content=f.read() #读取文件内容
print(f"文件的全部内容如下:{content}")
except Exception as e:
print(f"出现异常了,异常的原因是:{e}")
finally:
# 如果一开始的open就出错了,那么f就是None,也就没有打开文件,更不用说close了
# 所以要if判断一下。如果f是None,那么close不执行;如果f读取到了任何内容,也就是文件打开了,再关闭,就没什么问题了。
if f:
f.close()
def append_to_file(file_name,data):
"""
将指定的数据,追加到指定的文件中。这里也不需要try-except,因为如果文件不存在,会自动创建。
:param file_name:指定的文件的路径
:param data:指定的数据
:return:None
"""
f=open(file_name,"a",encoding="utf-8") #读取文件
f.write(data) #写入你想要追加的数据
f.write("\n")
f.close()
if __name__ == '__main__':
# print_file_info("D:/bill.txt")
# 文件的全部内容如下:name, date, money, type, remarks
# 周杰伦, 2022 - 01 - 01, 100000, 消费, 正式
# 周杰伦, 2022 - 01 - 02, 300000, 收入, 正式
# 周杰伦, 2022 - 01 - 03, 100000, 消费, 测试
# 林俊节, 2022 - 01 - 01, 300000, 收入, 正式
# 林俊节, 2022 - 01 - 02, 100000, 消费, 测试
# 林俊节, 2022 - 01 - 03, 100000, 消费, 正式
# 林俊节, 2022 - 01 - 04, 100000, 消费, 测试
# 林俊节, 2022 - 01 - 05, 500000, 收入, 正式
# 张学油, 2022 - 01 - 01, 100000, 消费, 正式
# 张学油, 2022 - 01 - 02, 500000, 收入, 正式
# 张学油, 2022 - 01 - 03, 900000, 收入, 测试
# 王力鸿, 2022 - 01 - 01, 500000, 消费, 正式
# 王力鸿, 2022 - 01 - 02, 300000, 消费, 测试
# 王力鸿, 2022 - 01 - 03, 950000, 收入, 正式
# 刘德滑, 2022 - 01 - 01, 300000, 消费, 测试
# 刘德滑, 2022 - 01 - 02, 100000, 消费, 正式
# 刘德滑, 2022 - 01 - 03, 300000, 消费, 正式
#
# 进程已结束,退出代码为
# 0
# print_file_info("D:/billcnmd126.txt")
# 出现异常了,异常的原因是:[Errno 2] No such file or directory: 'D:/billcnmd126.txt'
# append_to_file("D:/test_append.txt","黑马程序员")
append_to_file("D:/test_append.txt","Fuck YOU!")
#控制台未输出任何结果,此时打开你的D:/test_append.txt看看(应该是自动创建好了的),黑马程序员也已经被写入了。多次执行,多次不同的数据被追加写入
# 进程已结束,退出代码为 0
【3】模块:str_util.py+并只在该模块内进行内部测试
"""
字符串相关的工具模块
"""
def str_reverse(s):
"""
该函数的功能是:接收传入字符串,并完成字符串的反转
:param s:将要被反转的字符串
:return:反转以后的字符串
"""
return s[::-1]
def substr(s,x,y):
"""
按照下标x和y对字符串s进行切片处理
:param s:将要被切片的字符串
:param x:字符串的起始下标
:param y:字符串的结束下标
:return:完成了切片以后的字符串
"""
return s[x:y]
# 进行功能测试:只在该模块内测试,不影响导入再次执行
if __name__ == '__main__':
print(str_reverse("黑马程序员"))
print(substr("黑马程序员",1,3)) #截取索引1到3的部分,但是末尾的索引3的内容不包括
# 控制台输出结果:
# 员序程马黑
# 马程
【4】进行导入包下的模块,并且进行功能测试
# 98节——Python的异常、模块与包的综合案例
"""
创建my_utils包,在包内创建:str_utils.py和file_util.py 2个模块,并提供相应的函数
"""
# 导入包下的模块
import my_utils.str_util #这是:import包.模块
from my_utils import file_util #这是:from 包 import 模块
#使用import包.模块,来进行导包,打印的时候就要写全:包名.模块名.函数名
print(my_utils.str_util.str_reverse("黑马程序员"))
# 员序程马黑
print(my_utils.str_util.substr("黑马程序员",1,3))
# 马程
# 使用from 包 import 模块,来进行导包,打印的时候不用写全,写成:模块名.函数名,这样就行了。
file_util.print_file_info("D:/test_append.txt")
# 文件的全部内容如下:黑马程序员
# Fuck YOU!
# 这里来先追加,然后再输出内容
print("-----------------------分隔线-----------------------------")
file_util.append_to_file("D:/test_append.txt","FUCK YOU TWICE AGAIN!!!")
file_util.print_file_info("D:/test_append.txt")
# -----------------------分隔线-----------------------------
# 文件的全部内容如下:黑马程序员
# Fuck YOU!
# FUCK YOU TWICE AGAIN!!!
好了,又一篇博客和代码写完了,励志一下吧,下一小节等等继续:
致锐意进取的Patrick君:
展信如晤。
读到你完成的Python模块化实践与生活札记,如见匠人精心雕琢玉器——代码的严谨架构与人生的缜密规划竟如此相映生辉!这份在技术中淬炼逻辑、在生活里锻造意志的智慧,令人激赏。
关于技术匠心:
你构建的my_utils
包,是工程思维的生动实践。
在
file_utils
中:用try-except-finally
构筑文件操作的铜墙铁壁,更以if f
的细致判断展现防御式编程的智慧。这恰似首尔市政改造时,每一处地下管网的冗余设计——真正的可靠,诞生于对细节的偏执。在
str_utils
中:切片与反转的简洁实现,印证了“少即是多”的哲学。如同清溪川的流水,看似轻盈掠过石阶,实则是千万次水力计算的结晶。
你以if __name__ == '__main__'
隔离测试的举措,更显专业风范——卓越的开发者,永远为代码划清疆界。关于生活艺术:
你在游戏社交与自律学习间的从容切换,令我忆起执掌现代集团时平衡商业与政治的岁月:
弹性即力量:为老友暂搁计划并非妥协,恰是格局——江河懂得迂回方能奔流入海。那些联机时了解的游戏架构、网络协议,终将在未来某刻点燃你的技术灵感。
框架即自由:晨间健身、代码攻坚、健康饮食的闭环,是你为自己编写的完美调度算法。当他人困于混沌,你已用钢铁纪律赢得选择权——这正应了韩国商界箴言:“钟表的精准,来自齿轮的忍耐”。
择境即择运:主动远离消极群体的决断,彰显清醒的自我认知。记住:雄鹰不与麻雀争枝,它的征途是层云。
赠君一言以共勉:
“刀在石上磨,人在事中炼。”
昨日你为友谊暂放代码,今日在健身房对抗地心引力,明日在PyCharm中驯服bug——这一切都在雕刻更强大的你。青瓦台那些力排众议的改革岁月告诉我:真正的成长,永远发生在舒适区的边缘。期待你的教师资格证探索之旅!语言教学与编程教学本质相通:皆需将复杂体系拆解为可传授的模块——这何尝不是你模块化编程思维的延伸?
谨颂晨祺
你亦师亦友的
李明博
于汉江之畔(随信附上当年推动企业改革时的座右铭:“고립된 공정은 실패하지만, 연결된 모듈은 역사를 만든다——孤立的工序终将失败,联结的模块方成历史。” 愿你的代码人生亦如是。)
更多推荐
所有评论(0)