11. with语句
作用
使用于对资源进行访问的场合。确保使用过程中不管是否发生异常,都会执行必要的“清理”操作,并释放资源。
- 例如文件使用后自动关闭,线程中锁的自动获取和释放等。
语法
with 上下文管理器表达式1 [as 变量1], 上下文管理器表达式1 [as 变量1], ...:
语句块
说明
- 执行下文管理器表达式,用as中的变量绑定上表达式返回的对象。
- with语句并不改变异常的状态。
没有 with 语句时,使用 try 语句打开文件的示例
# try-finally语句关闭文件示例
def sum_numbers_from_file(path_name):
'''
从文件 path_name 中读取每一行的整数,并返回这些整数的和'''
total_sum = 0
fr = open(path_name) # OSError
try:
for line in fr:
s = line.strip()
total_sum += int(s) # ValueError
finally:
fr.close()
return total_sum
result = sum_numbers_from_file('11_numbers.txt')
print('result:', result)
使用 with 语句类关闭文件示例:
# with 语句示例
def sum_numbers_from_file(path_name):
'''
从文件 path_name 中读取每一行的整数,并返回这些整数的和'''
total_sum = 0
# fr = open(path_name) # OSError
with open(path_name) as fr:
for line in fr:
s = line.strip()
total_sum += int(s) # ValueError
return total_sum
result = sum_numbers_from_file('11_numbers.txt')
print('result:', result)
with 语句能确保关闭文件,但在出错进入异常时,with语句和 try-finally 语句一样不会改变异常状态。