在请求Python包中使用钩子的AttributeError
我将请求发送到一个钩住的函数中,并接收它们的响应对象。 有时,我从同一个函数中发送一个新的请求,该函数依次调用发送请求的函数(每个请求都有一个新线程) 这将在请求模块本身中创建以下异常:在请求Python包中使用钩子的AttributeError,python,python-2.7,python-requests,attributeerror,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()
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'
我觉得很奇怪。你知道会发生什么吗
注意:我看了这个问题,但我的问题不同:异常点前的一行是:
r = dispatch_hook('response', hooks, r, **kwargs)
钩子返回一个布尔值,而它应该返回一个响应对象。布尔值没有历史
属性,而响应对象则有
或者,如果您无意更改响应,则返回None
从:
如果回调函数返回一个值,则假定它将替换传入的数据。如果函数不返回任何内容,则不会影响其他内容
为响应
钩子传递的值是响应对象;替换值也应该是响应对象
修复您的钩子。从您的回溯中,我们可以看到您传入了
self.http\u callback
作为钩子,如果您想知道在哪里查找。您返回了一个布尔值,其中请求
需要一个响应对象。但是,如果没有您的代码,就无法说明任何更有意义的内容。self.http\u callback
定义在哪里?FWIW,我不确定我们的文档在这方面是否正确。我必须检查一下。@sigmavirus24:当前的版本看起来仍然符合文档要求。ReturnNone
并且对传入的初始值不做任何操作,返回一些内容并替换该值。@sigmavirus24:钩子唯一改变的地方(自Kenneth上次在2012年12月重构钩子以来)是额外支持传入原始.get()
,.post中的任意关键字参数()
等。调用已注册的钩子。这是在..嗯,异常来自请求代码本身。我看得更深入了一点,似乎请求使用回调函数的返回
,并搜索它的历史
属性。在某些情况下,我的函数返回一个bool
,这不是necessary,所以我正在删除它,它应该可以解决问题。但是,在请求中添加一些错误处理可能会很好,不是吗?我告诉过你为什么异常来自请求中的:因为你的钩子违反了它所期望的有文档记录的返回值。当库代码抛出异常时,你总是需要验证你是否无法传递无效数据。