我 .get '请求并处理响应,如:
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})
我的问题:
我什么时候应该使用挂钩?或者,我为什么要使用钩子?
我希望在使用请求resp.text
过程返回请求的响应后启动一个对象(解析器)。
这种场景的Pythonic,正确方法是什么?
谢谢
答案 0 :(得分:7)
钩子离“魔法”不到一百万英里。它们会使你的代码有可能做出令其他人感到惊讶的事情(从而违反“明确比隐含更好”)。
因此,钩子应该仅用于驱动行为,使更多可预测,而不是更少。例如,请求在内部使用handle 401 responses进行各种身份验证。
因此,您应该受到钩子限制的指导。钩子需要返回Response
对象的relevant part of the documentation状态。这会导致一些明显的可能行为:你可以发出额外的请求(比如上面的401钩子),或者你可以用某种方式改变Response
。
启动解析器正是你不应该用钩子做的事情。它应该是您业务逻辑的一部分。我会写一个实用函数。