我正在发送请求并将其响应对象接收到一个钩子函数中。 有时,我正在从同一个函数发送一个新请求,该函数又调用发送请求的函数(每个请求都有一个新线程)。
这会在“请求”模块中创建以下异常:
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
答案 0 :(得分:2)
异常点之前的行显示为:
r = dispatch_hook('response', hooks, r, **kwargs)
你的钩子返回一个布尔值,而应该返回一个响应对象。布尔值没有history
属性,而响应对象则没有。
或者,如果您不想改变回复,请返回None
。
如果回调函数返回一个值,则假定它是替换传入的数据。如果函数没有返回任何内容,则不会产生其他任何影响。
传递给response
钩子的值是响应对象;替换值也应该是一个响应对象 。
修复你的钩子。如果你想知道在哪里看,我们可以看到你传递了self.http_callback
作为勾引。