python关键字"with"的用途是什么?

699 投票
2 回答
669818 浏览
提问于 2025-04-15 14:02

Python中的“with”这个关键词是用来简化代码的,特别是在处理一些需要打开和关闭的资源时,比如文件。

使用“with”可以确保在你完成操作后,资源会自动被关闭,这样就不用担心忘记关闭它们了。

举个例子,假设你要打开一个文件来读取内容,如果不使用“with”,你需要手动打开和关闭文件,这样容易出错。而使用“with”后,Python会帮你处理这些事情,让代码更简洁,也更安全。

下面是一个示例,展示了如何使用“with”来打开文件:

>>> with open('/tmp/workfile', 'r') as f:
...     read_data = f.read()
>>> f.closed
True

2 个回答

487

来自Preshing on Programming博客的解释

当你有两个相关的操作想要一起执行,并且中间需要一段代码时,使用这个方法会很方便。一个经典的例子就是打开一个文件,处理这个文件,然后再关闭它:

 with open('output.txt', 'w') as f:
     f.write('Hi there!')

上面的这个方法会在代码块执行完后自动关闭文件。(继续阅读可以了解关闭是如何发生的。)使用这个方法的好处是,不管代码块是怎么结束的,它都会确保文件被关闭。如果在代码块结束前发生了错误,它会在错误被外部处理之前关闭文件。如果代码块里有返回语句,或者继续、跳出循环的语句,这个方法也会自动关闭文件。

637

在Python中,with这个关键词用来处理一些不受管理的资源,比如文件流。它和VB.NET和C#中的using语句很像。使用with可以确保当使用这些资源的代码运行完毕后,资源会被“清理”,即使在运行过程中出现了错误也没关系。它其实是对try/finally结构的一种简化写法。

来自Python文档的说明:

with语句让之前需要用try...finally块来确保执行清理代码的代码变得更加清晰。

with语句是一种控制流结构,它的基本结构是:

with expression [as variable]:
    with-block

这个表达式会被计算,结果应该是一个支持上下文管理协议的对象(也就是说,它需要有__enter__()__exit__()这两个方法)。

更新:根据Scott Wisniewski的评论修正了VB的引用。我确实把withusing搞混了。

撰写回答