Python-进阶特性篇(IO与异常处理)
1、IO篇
IO就是在不同设备之间进行读写数据,比如内存和磁盘之间进行读写数据。
- Input、输入、读取:程序(运行在内存)读取外部设备的数据。
- Output、输出、写入:程序(运行在内存)往外部设备写入数据。
- 数据流:理解为传输的数据。
- 同步IO:发IO指令、暂停等待IO结果返回后才往下执行。
- 异步IO:只发IO指令、不等待IO结果,当IO返回结果时、再进行处理。(复杂度和性能远远高于同步IO)
- 代码示例:使用input()和print()
input_demo1 = input("请输入内容1:") #1 input_demo2 = input("请输入内容2:") #2 #直接输出 print(input_demo1) #1,自动换行 print(input_demo2) #2,自动换行 # %5s:%s表示替换为字符串,默认右对齐,宽度为5(不足自动补充空格)。 # \n:换行 # %s:替换为字符串 print("%5s\n%s" % (input_demo1,input_demo2)) #" 1","2" #{0:s}:0表示使用第1个参数,s表示替换为字符串,默认左对齐,宽度为5(不足自动补充空格)。 print("{0:5s}\n{1:s}".format(input_demo1,input_demo2)) #"1 ","2" name = "Alice" age = 30 print(f"Hello, {name}! You are {age} years old.") #f-string,{xx}自动替换为变量值 # Hello, Alice! You are 30 years old.
1.1 核心IO操作:文件读写与上下文管理
- 操作流程:使用open()打开文件获取一个文件对象,再读取该文件对象,最后使用close()关闭文件对象。
- open()常见参数
| file | 指定文件 |
file = r"C:\Users\wei.feng\Desktop\test.txt"
|
| mode | 操作模式 |
mode = "r"
r:只读、默认值(操作文件) w:覆盖写 a:追加写 1、+后缀:可读可写 2、b后缀:以字节为单位操作文件(操作图片、视频) |
|
encoding
|
指定编码方式 | encoding = "utf-8" |
- 代码示例:读写test.txt
path_demo = r"C:\Users\wei.feng\Desktop\test.txt" str_list = ["内容1", "内容2"] # with语句自动分配并且释放资源,属于上下文管理器
# 本质上是实现了 __enter__ 和 __exit__ 方法的对象,是管理资源生命周期的强大工具
# 创建自定义上下文管理器:使用@contextmanager装饰器或实现__enter__/__exit__方法
with open(file=r"C:\Users\wei.feng\Desktop\test.txt",mode="w",encoding="utf-8") as f: f.write("写入内容和换行\n") f.writelines(str_list) """ 写入内容 内容1内容2 """ with open(file=r"C:\Users\wei.feng\Desktop\test.txt",mode="r",encoding="utf-8") as f: all_content = f.read() #读取全部内容,可指定size读取指定大小的内容 single_line = f.readline() #读取一行,可指定size读取一行中指定大小的内容 all_content_list = f.readlines() #读取文件中的所有行、返回一个字符串列表
- 文件指针:用于确认读写文件的起始位置
- tell():获取文件指针当前所处的位置
- seek():移动文件指针到指定位置
1.2 高级/扩展阅读(异步IO)
基本过程:先创建协程、放入EventLoop(事件循环),主线程不断执行事件循环遇到await后挂起当前协程,去执行事件循环中的其它协程。
- 使用模块:asyncio
- 协程:协同程序,协程可中断等待
- 关键字:async关键字创建协程,await关键字挂起协程
2、异常处理篇(构建健壮程序的基石)
Python的异常处理机制是用于识别和处理错误的,保证程序能正常运行。
在大型项目中,建议继承Exception类创建项目特定的异常(如ConfigError, ValidationError),使错误处理更清晰。
异常层次结构:BaseException → Exception → 具体异常
| 语法错误、SyntaxError |
1、解释器会检查 2、必须进行错误处理 |
| 运行时错误异常、Exception |
1、解释器不会检查,运行时遇到错误后默认退出程序 2、可通过异常处理让程序继续运行 常见异常:FileNotFoundError、PermissionError、IndexError、ZeroDivisionError AssertionError:assert weight > 0, "体重必须大于0"(assert的表达式为假,触发AssertionError) ---调试阶段使用,可能被全局禁用(Python解释器使用 |
- 代码示例:读取文件,处理文件不存在、权限不足等异常。
path_demo = r"C:\Users\wei.feng\Desktop\test.txt" try: with open(file=r"C:\Users\wei.feng\Desktop\test.txt",mode="r",encoding="utf-8") as f: all_content = f.read() #读取全部内容,可指定size读取指定大小的内容 #捕获异常范围由小到大 except FileNotFoundError as e: e.args #异常字符串描述 repr(e) #异常类型+字符串描述 print("文件不存在") raise #抛出当前捕获的异常 raise FileNotFoundError("文件不存在") #抛出指定类型异常并附带异常的描述信息 raise NewException from original_exception #可以保留原始异常的上下文,捕获一个异常后抛出另一个异常 except PermissionError as e: print("权限不足") except Exception as e: print("其它异常"+e.args) else: print("try块没有抛出异常时执行,适合放置依赖try块成功执行的代码") finally: #try块中有return语句时,finally块仍会先于return执行 print("无论是否发生异常都会执行,适合做最终的资源清理")
- 控制台错误输出分析
Traceback (most recent call last):#错误的跟踪信息 File "err.py", line 11, in <module> main() #在第11行调用main()出错,原因在下面 File "err.py", line 9, in main bar('0') File "err.py", line 6, in bar return foo(s) * 2 File "err.py", line 3, in foo return 10 / 0 #最终原因,第三行执行的语句 ZeroDivisionError: division by zero #错误类型
本文来自博客园,作者:Fēngwèi,转载请注明原文链接:https://www.cnblogs.com/fengwei-blogs/p/21174616

浙公网安备 33010602011771号