with 是 Python 的上下文管理语法

创建一个 Session 对象,临时赋值给 session;代码块执行结束后,自动关闭这个 Session。

 with sessions.Session() as session:
        return session.request(method=method, url=url, **kwargs)

分开看:

sessions.Session()
创建一个 requests 会话对象,大致等价于:
session = requests.sessions.Session()#requests包的sessions.py模块的Session方法

 

as session 表示将创建的对象保存到变量 session
with sessions.Session() as session:
    response = session.request("GET", url)

 

with 是 Python 的上下文管理语法。无论代码块正常结束还是发生异常,都会执行清理操作。

因此:

with sessions.Session() as session:
    response = session.request("GET", url)

 

大致相当于:

session = sessions.Session()

try:
    response = session.request("GET", url)
finally:
    session.close()

 

它的主要好处是确保 Session 被关闭:

with sessions.Session() as session:
    response = session.get("https://example.com")

离开 with 代码块时:

session.close()

会被自动调用,用于释放 Session 管理的连接适配器等资源。

即使请求发生异常,也能执行关闭操作:

with sessions.Session() as session:
    raise RuntimeError("请求失败")

# Session 依然会被自动关闭

 

这是通过上下文管理器方法实现的,概简化如下:

class Session:
    def __enter__(self):
        return self

    def __exit__(self, exc_type, exc_value, traceback):
        self.close()

执行顺序如下:

sessions.Session()
    ↓
调用 session.__enter__()
    ↓
将返回值赋给 session
    ↓
执行 with 内的代码
    ↓
调用 session.__exit__()
    ↓
自动执行 session.close()

 

requests 顶层请求方法中,可以简化理解为:

def request(method, url, **kwargs):
    with sessions.Session() as session:
        return session.request(method, url, **kwargs)

 

所以:

requests.get(url)

 

大致会创建一个临时 Session,用它发出请求,然后自动关闭 Session。若需要连续发送多个请求,则通常自己创建并复用 Session:

with requests.Session() as session:
    response1 = session.get(url1)
    response2 = session.get(url2)

 

这样多个请求可以复用连接和 Cookie。

posted @ 2026-09-09 15:49  苹果芒  阅读(4)  评论(0)    收藏  举报