我应该在 urllib.urlopen() 之后调用 close() 吗? [英] should I call close() after urllib.urlopen()?

查看:45
本文介绍了我应该在 urllib.urlopen() 之后调用 close() 吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是 Python 新手,正在阅读别人的代码:

I'm new to Python and reading someone else's code:

是否应该在urllib.urlopen() 后接urllib.close()?否则,会泄漏连接,对吗?

should urllib.urlopen() be followed by urllib.close()? Otherwise, one would leak connections, correct?

推荐答案

必须在 urllib.urlopenresult 上调用 close 方法>, not 在您所考虑的 urllib 模块本身上(正如您提到的 urllib.close - 它不存在).

The close method must be called on the result of urllib.urlopen, not on the urllib module itself as you're thinking about (as you mention urllib.close -- which doesn't exist).

最好的方法:代替 x = urllib.urlopen(u) 等,使用:

The best approach: instead of x = urllib.urlopen(u) etc, use:

import contextlib

with contextlib.closing(urllib.urlopen(u)) as x:
   ...use x at will here...

with 语句和 closure 上下文管理器将确保即使出现异常也能正确关闭.

The with statement, and the closing context manager, will ensure proper closure even in presence of exceptions.

这篇关于我应该在 urllib.urlopen() 之后调用 close() 吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆