Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在请求Python包中使用钩子的AttributeError_Python_Python 2.7_Python Requests_Attributeerror - Fatal编程技术网

在请求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:当前的版本看起来仍然符合文档要求。Return
None
并且对传入的初始值不做任何操作,返回一些内容并替换该值。@sigmavirus24:钩子唯一改变的地方(自Kenneth上次在2012年12月重构钩子以来)是额外支持传入原始
.get()
.post中的任意关键字参数()
等。调用已注册的钩子。这是在..嗯,异常来自请求代码本身。我看得更深入了一点,似乎请求使用回调函数的
返回
,并搜索它的
历史
属性。在某些情况下,我的函数返回一个
bool
,这不是necessary,所以我正在删除它,它应该可以解决问题。但是,在请求中添加一些错误处理可能会很好,不是吗?我告诉过你为什么异常来自
请求中的
:因为你的钩子违反了它所期望的有文档记录的返回值。当库代码抛出异常时,你总是需要验证你是否无法传递无效数据。