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类创建项目特定的异常(如ConfigErrorValidationError),使错误处理更清晰。

异常层次结构:BaseException → Exception → 具体异常

语法错误、SyntaxError

1、解释器会检查

2、必须进行错误处理

运行时错误异常、Exception

1、解释器不会检查,运行时遇到错误后默认退出程序

2、可通过异常处理让程序继续运行

常见异常:FileNotFoundError、PermissionError、IndexError、ZeroDivisionError

AssertionError:assert weight > 0, "体重必须大于0"(assert的表达式为假,触发AssertionError)

---调试阶段使用,可能被全局禁用(Python解释器使用-O),生产环境用if加raise处理异常

  • 代码示例:读取文件,处理文件不存在、权限不足等异常。
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 #错误类型

 

posted @ 2026-07-06 16:33  Fēngwèi  阅读(5)  评论(0)    收藏  举报