2014-06-13 22 views
-3

我正在發送請求並將其響應對象接收到掛鉤函數中。 有時候,我發送了一個新的請求,該請求反過來調用發送請求的函數(每個請求都有一個新的線程)。使用請求中的鉤子的AttributeError Python包

,在請求創建下列除外模塊本身:

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

+2

你已經返回了一個布爾值,其中'requests'需要一個響應對象。但是,如果沒有你的代碼,就沒有什麼更有意義的東西了 –

+1

定義了self.http_callback? – huu

回答

2

異常點前的一行寫着:

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

鉤子返回一個布爾值,同時應該返回響應對象。布爾值沒有history屬性,而響應對象會。

或者,如果您不打算更改響應,則返回None

event hooks documentation

如果回調函數返回一個值,假設它是替代中傳遞的數據如果函數不返回任何東西,沒有別的影響。

傳入的response鉤子的值是響應對象;重置值應該是響應對象也是

修復你的鉤子。從你的回溯中,我們可以看到你通過self.http_callback作爲鉤,如果你想知道在哪裏看。

+0

FWIW,我不確定我們的文檔在這方面是否正確。我必須檢查。 –

+0

@ sigmavirus24:當前[鉤子的實現](https://github.com/kennethreitz/requests/blob/master/requests/hooks.py)看起來仍然適合文檔。返回'None'並且沒有任何操作傳入初始值,返回值並替換該值。 –

+0

@ sigmavirus24:唯一改變了鉤子(自2012年12月肯尼斯重構鉤子以來)是額外支持從原始'.get()','.post()'傳遞任意關鍵字參數,等等調用註冊的鉤子。這是[2013年2月](https://github.com/kennethreitz/requests/commit/d0285fac4203e8cfed6b5ceeb96b2646076e745d#diff-ab3246c102b4e3c7381cf4d1ea4b2bea).. –