11. with语句

作用

使用于对资源进行访问的场合。确保使用过程中不管是否发生异常,都会执行必要的“清理”操作,并释放资源。

语法

with 上下文管理器表达式1 [as 变量1], 上下文管理器表达式1 [as 变量1], ...:
    语句块

说明

没有 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 语句一样不会改变异常状态。