在Requests Python包中使用钩子的AttributeError

时间:2014-06-13 21:24:35

标签: python python-2.7 python-requests attributeerror

我正在发送请求并将其响应对象接收到一个钩子函数中。 有时,我正在从同一个函数发送一个新请求,该函数又调用发送请求的函数(每个请求都有一个新线程)。

这会在“请求”模块中创建以下异常:

Exception in thread Thread-103:
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 810, in __bootstrap_inner
    self.run()
  File "/usr/lib/python2.7/threading.py", line 763, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/api.py", line 272, in thread_func
    r = self.session.post(url, data=params, headers=headers, timeout=60, hooks=dict(response=self.http_callback))
  File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 425, in post
    return self.request('POST', url, data=data, **kwargs)
  File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 383, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 494, in send
    if r.history:
AttributeError: 'bool' object has no attribute 'history'

我发现这很奇怪。你知道可能会发生什么吗?

注意:我查看了这个问题,但问题不同:Problems with hooks using Requests Python package

1 个答案:

答案 0 :(得分:2)

异常点之前的行显示为:

r = dispatch_hook('response', hooks, r, **kwargs)

你的钩子返回一个布尔值,而应该返回一个响应对象。布尔值没有history属性,而响应对象则没有。

或者,如果您不想改变回复,请返回None

来自event hooks documentation

  

如果回调函数返回一个值,则假定它是替换传入的数据。如果函数没有返回任何内容,则不会产生其他任何影响。

传递给response钩子的值是响应对象;替换值也应该是一个响应对象

修复你的钩子。如果你想知道在哪里看,我们可以看到你传递了self.http_callback作为勾引。