我有一个例子:
import requests
with requests.Session() as s:
s.get('http://python.su/')
requests.get
是否使用与此示例相同的结构?
您能举例说明需要with
声明吗?
答案 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
使用模式,以方便重用。