Python请求:挂钩还是没挂钩?

Phi*_*hil 5 python request python-2.x python-2.7 python-requests

I" 获得 "的请求,并且处理如反应:

resp = requests.get('url')
resp = resp.text
.. # do stuff with resp
Run Code Online (Sandbox Code Playgroud)

在阅读了包的文档之后,我看到有一个钩子功能允许我这样做:

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

resp = requests.get('url', hooks = {'response': process_r})
Run Code Online (Sandbox Code Playgroud)

我的问题:

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

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

对于这种情况,这里有什么Pythonic,正确的方法?

谢谢

Luk*_*asa 7

钩子距离"魔法"不到一百万英里.它们会使你的代码有可能做出令其他人感到惊讶的事情(从而违反"明确比隐含更好").

因此,钩子应该仅用于驱动行为,使事物更容易预测,而不是更少.例如,请求在内部使用它们来处理各种身份验证的401响应.

因此,您应该受到钩子限制的指导.文档相关部分指出钩子需要返回一个Response对象.这会导致一些明显的可能行为:你可以发出额外的请求(比如上面的401钩子),或者你可以Response用某种方式改变它.

启动解析器就是你不应该用钩子做的事情.它应该是您业务逻辑的一部分.我会写一个实用函数.

  • 我不知道其他人会说什么,但这是一个很好的答案。无法期待更好的。希望这里有更多你这样的人。;-) 非常感谢,太好了! (2认同)