为什么“ requests”使用`with`语句?

Xio*_*ion 1 python python-requests

我有一个例子:

import requests
with requests.Session() as s:
  s.get('http://python.su/')
Run Code Online (Sandbox Code Playgroud)

是否requests.get使用与本示例相同的结构?

您能给我一些with需要说明的例子吗?

ale*_*cxe 5

文档中所述,Session()可用作上下文管理器以一种干净的方式关闭它和所有底层使用的适配器:

会话也可以用作上下文管理器:

with requests.Session() as s:
    s.get('http://httpbin.org/cookies/set/sessioncookie/123456789') 
Run Code Online (Sandbox Code Playgroud)

这样可以确保退出with块后立即关闭会话,即使发生未处理的异常也是如此。

Session可以并应该是跨多个请求持续cookies和其他参数和重复使用相同的TCP连接共享,但requests.get()在另一方面就是这样会产生一个单一的通话Response实例-有上下文经理就没有意义。

请阅读以下内容,以更好地了解上下文管理器:

  • OP 需要一个简单的 `r = s.get()` 是否需要 `s.close()`?如果会话没有明确关闭会发生什么?或者会话保持打开状态意味着什么? (2认同)