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

时间:2016-01-17 14:42:23

标签: python python-requests

我有一个例子:

import requests
with requests.Session() as s:
  s.get('http://python.su/')

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

您能举例说明需要with声明吗?

2 个答案:

答案 0 :(得分:4)

正如documentation中所述,Session()可用作上下文管理器,以便能够关闭它并将所有底层使用的适配器关闭干净时尚

  

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

with requests.Session() as s:
    s.get('http://httpbin.org/cookies/set/sessioncookie/123456789') 
     

这将确保一旦with块关闭会话   退出,即使发生未处理的异常。

Session可以并且应该在多个请求之间共享,这些请求持久化cookie和其他参数并重用相同的TCP连接,但另一方面requests.get()只是一个会产生的调用单个Response实例 - 在上下文管理器中没有任何意义。

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

答案 1 :(得分:0)

如果您阅读了requests.Session

的文档
  

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

with requests.Session() as s:
    s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
     

即使出现未处理的异常,这也会确保会在退出with块时立即关闭会话

使用with语句是Python中处理上下文管理的常用习惯用法:

  

with语句用于使用上下文管理器定义的方法包装块的执行(请参阅使用语句上下文管理器一节)。这允许封装常见的try ... except ... finally使用模式,以方便重用。