Python请求:钩子还是没有钩子?

Python请求:钩子还是没有钩子?,python,python-2.7,request,python-requests,python-2.x,Python,Python 2.7,Request,Python Requests,Python 2.x,I'。获取一个请求并处理响应,如下所示: resp = requests.get('url') resp = resp.text .. # do stuff with resp 在阅读了软件包的文档后,我看到有一个钩子功能,它允许我执行以下操作: def process_r(resp, **kwargs): .. do stuff with resp resp = requests.get('url', hooks = {'response': process_r}) 我的问题是: 我应该

I'。获取一个请求并处理响应,如下所示:

resp = requests.get('url')
resp = resp.text
.. # do stuff with resp
在阅读了软件包的文档后,我看到有一个钩子功能,它允许我执行以下操作:

def process_r(resp, **kwargs): .. do stuff with resp

resp = requests.get('url', hooks = {'response': process_r})
我的问题是:

我应该什么时候用钩子?或者,我为什么要用钩子

我希望在使用requests
resp.text
过程返回请求响应后启动一个对象(解析器)

对于这个场景,什么是Pythonic的正确方法


谢谢你

钩子离“魔法”不到一百万英里。它们的作用是使您的代码可能会做一些让其他人吃惊的事情(从而违反“显式优于隐式”)

因此,挂钩实际上应该只用于驱动行为,使事情更可预测,而不是更少。例如,请求在内部使用它们来进行各种身份验证

因此,您应该遵循挂钩上的限制。钩子需要返回
响应
对象的状态。这导致了一些明显的可能行为:您可以发出额外的请求(如上面的401钩子),或者您可以以某种方式改变
响应


启动解析器正是使用钩子不应该做的事情。它应该是您业务逻辑的一部分。我会写一个实用函数来代替。

我不知道其他人会说什么,但这是一个很好的答案。没想到会有更好的。希望这里有更多像你这样的人非常感谢,太好了!