每次发送请求时销毁/创建新会话?Python requests模块求助
解决Requests会话创建与销毁的问题
嘿,刚接触Python和requests模块遇到这种小问题太正常了,我来帮你理清楚怎么正确管理会话,顺便解决你的缩进错误~
首先,先搞清楚requests里会话的两种正确使用方式:
方式1:显式创建Session并手动关闭
你之前尝试加session.close()出现缩进错误,大概率是把它放错了代码块的层级。比如你得确保close()和会话创建、请求发送的代码处于同一缩进级别,或者在请求处理完成的代码块内。
举个正确的例子:
import requests def send_post_request(): # 创建新会话 session = requests.Session() try: # 发送POST请求 response = session.post('https://example.com/api', data={'key': 'value'}) # 处理响应 print(response.status_code) print(response.json()) finally: # 不管请求成功失败,都关闭会话 session.close() # 调用函数 send_post_request()
这里用try...finally能保证即使请求过程中出错,会话也能被正确关闭,避免资源泄漏。如果你的session.close()之前缩进错了(比如缩进在response.json()那一行的层级),就会报错,调整到和session = requests.Session()同层级的代码块里就好。
方式2:用上下文管理器(推荐!)
其实requests的Session对象支持上下文管理器,用with语句的话,不需要手动调用session.close(),代码块结束后会自动销毁会话,更简洁也更安全:
import requests def send_post_request(): # 用with创建会话,自动管理生命周期 with requests.Session() as session: response = session.post('https://example.com/api', data={'key': 'value'}) # 处理响应 print(response.status_code) print(response.json()) # 这里不需要写session.close(),with块结束后自动关闭 send_post_request()
这种方式完全不用操心关闭的问题,还能避免因为忘记关闭或者缩进错误导致的问题,特别适合新手使用。
总结一下:如果手动调用close(),一定要注意缩进层级,把它放在会话使用完成后的同一缩进级别;更推荐用with语句来创建会话,自动处理销毁,省心又不容易出错~
内容的提问来源于stack exchange,提问作者Tyler
相关产品推荐
相关产品推荐

