菜鸟教程 -- 学的不仅是技术,更是梦想!

Python 3 教程
Python3 教程 Python3 简介 Python3 环境搭建 Python3 VScode Python3 基础语法 Python3 基本数据类型 Python3 数据类型转换 Python3 解释器 Python3 注释 Python3 运算符 Python3 数字(Number) Python3 字符串 Python3 列表 Python3 元组 Python3 字典 Python3 集合 Python3 条件控制 Python3 循环语句 Python3 编程第一步 Python3 推导式 Python3 迭代器与生成器 Python3 with Python3 函数 Python3 lambda Python3 装饰器 Python3 数据结构 Python3 模块 Python __name__ Python3 输入和输出 Python3 File Python3 OS Python3 错误和异常 Python3 面向对象 Python3 命名空间/作用域 Python 虚拟环境的创建 Python 类型注解 Python3 标准库概览 Python3 实例 Python 测验

Python3 高级教程

Python3 正则表达式 Python3 CGI编程 Python3 MySQL(mysql-connector) Python3 MySQL(PyMySQL) Python3 网络编程 Python3 SMTP发送邮件 Python3 多线程 Python3 XML 解析 Python3 JSON Python3 日期和时间 Python3 内置函数 Python3 MongoDB Python3 urllib Python uWSGI 安装配置 Python3 pip Python3 operator Python math Python requests Python random Python OpenAI Python 有用的资源 Python AI 绘画 Python statistics Python hashlib Python 量化 Python pyecharts Python selenium 库 Python 爬虫 Python Scrapy 库 Python Markdown Python sys 模块 Python Pickle 模块 Python subprocess 模块 Python queue 模块 Python StringIO 模块 Python logging 模块 Python datetime 模块 Python re 模块 Python csv 模块 Python threading 模块 Python asyncio 模块 Python PyQt Python for 循环 Python while 循环
(追記) (追記ここまで)

Python 异常中的 with 关键字

Document 对象参考手册 Python3 错误和异常

Python 中的 with 语句用于异常处理,封装了 try...except...finally 编码范式,提高了易用性。

with 语句使代码更清晰、更具可读性, 它简化了文件流等公共资源的管理。

在处理文件对象时使用 with 关键字是一种很好的做法。

我们可以看下以下几种代码实例:

不使用 with,也不使用 try...except...finally

实例

file = open('./test_runoob.txt', 'w')
file.write('hello world !')
file.close()

以上代码如果在调用 write 的过程中,出现了异常,则 close 方法将无法被执行,因此资源就会一直被该程序占用而无法被释放。

更多 Python with 关键字参考:https://www.runoob.com/python3/python3-with-keyword.html

接下来我们呢可以使用 try...except...finally 来改进代码:

实例

file = open('./test_runoob.txt', 'w')
try:
file.write('hello world')
finally:
file.close()

以上代码我们对可能发生异常的代码处进行 try 捕获,发生异常时执行 except 代码块,finally 代码块是无论什么情况都会执行,所以文件会被关闭,不会因为执行异常而占用资源。

使用 with 关键字:

实例

with open('./test_runoob.txt', 'w') as file:
file.write('hello world !')

使用 with 关键字系统会自动调用 f.close() 方法, with 的作用等效于 try/finally 语句是一样的。

我们可以在执行 with 关键字后检验文件是否关闭:

实例

>>> with open('./test_runoob.txt') as f:
... read_data = f.read()

>>> # 查看文件是否关闭
>>> f.closed
True

with 语句实现原理建立在上下文管理器之上。

上下文管理器是一个实现 __enter____exit__ 方法的类。

使用 with 语句确保在嵌套块的末尾调用 __exit__ 方法。

这个概念类似于 try...finally 块的使用。

实例

with open('./test_runoob.txt', 'w') as my_file:
my_file.write('hello world!')

以上实例将 hello world! 写到 ./test_runoob.txt 文件上。

在文件对象中定义了 __enter__ 和 __exit__ 方法,即文件对象也实现了上下文管理器,首先调用 __enter__ 方法,然后执行 with 语句中的代码,最后调用 __exit__ 方法。 即使出现错误,也会调用 __exit__ 方法,也就是会关闭文件流。

实例

以下 Python 代码是一个简单的旅游计划管理工具,它从 5A.txt 文件中读取城市列表,并提供以下功能:

  1. 读取城市列表:从文件中读取以数字开头的城市名称,添加到旅游计划列表中。

  2. 删除城市:用户可以输入不想去的城市数量和序号,将对应的城市从计划中删除。

  3. 修改城市:用户可以选择修改某些城市的名称,更新旅游计划。

  4. 生成随机旅游计划:打乱城市顺序,并显示前五个城市作为最终的旅游推荐。

5A.txt 文件每行包含一个以数字开头的城市名称:

1. 北京
2. 上海
3. 广州
4. 深圳
5. 成都
6. 杭州
7. 西安
8. 重庆
9. 南京
10. 苏州

实例

from random import shuffle

try:
with open('5A.txt', 'r') as fp:
i = [line for line in fp if line[0].isdigit()]
except FileNotFoundError:
print("文件 '5A.txt' 未找到,请检查文件路径。")
exit()

travelList = []

# 添加旅游城市
for index, item in enumerate(i):
temp_1 = item.strip()[2:] # 使用 strip 去除行末的换行符
temp_1 = f"{index}#{temp_1}"
travelList.append(temp_1)

print("旅游计划城市:", travelList)

# 删除旅游城市
city_num = input('输入不想旅游城市的个数:')
try:
for _ in range(int(city_num)):
index = int(input('输入不想旅游城市的序号(第1个城市索引为0)'))
if 0 <= index < len(travelList):
travelList.pop(index)
print("旅游计划城市:", travelList)
else:
print("输入的序号超出范围。")
except ValueError:
print("请输入有效的整数。")

# 修改旅游城市
city_num = input('输入修改计划旅游的城市个数:')
try:
for _ in range(int(city_num)):
index = int(input('输入修改计划旅游的城市序号(第1个城市索引为0)'))
if 0 <= index < len(travelList):
city_name = input('输入修改计划旅游的城市名称:')
travelList[index] = city_name
print('旅游计划城市:', travelList)
else:
print("输入的序号超出范围。")
except ValueError:
print("请输入有效的整数。")

shuffle(travelList)
print('请领取您的TOPS旅游计划:', travelList[:5])

执行以上代码,输出结果类似如下:

旅游计划城市: ['0# 北京', '1# 上海', '2# 广州', '3# 深圳', '4# 成都', '5# 杭州', '6# 西安', '7# 重庆', '8# 南京', '9#. 苏州']
输入不想旅游城市的个数:0
输入修改计划旅游的城市个数:3
输入修改计划旅游的城市序号(第1个城市索引为0)4
输入修改计划旅游的城市名称:7
旅游计划城市: ['0# 北京', '1# 上海', '2# 广州', '3# 深圳', '7', '5# 杭州', '6# 西安', '7# 重庆', '8# 南京', '9#. 苏州']

Document 对象参考手册 Python3 错误和异常

AI 思考中...

点我分享笔记

  • 昵称 (必填)
  • 邮箱 (必填)
  • 引用地址

AltStyle によって変換されたページ (->オリジナル) /