2013-07-21 79 views
4

不用彷徨'的請求和處理類似的響應:Python請求:鉤或不鉤?

resp = requests.get('url') 
resp = resp.text 
.. # do stuff with resp 

閱讀包的文檔後,我看到有一個鉤功能,這將允許我這樣做:

def process_r(resp, **kwargs): .. do stuff with resp 

resp = requests.get('url', hooks = {'response': process_r}) 

我的問題:

什麼時候應該使用掛鉤?或者,爲什麼我應該使用鉤子?

我希望在使用請求resp.text過程返回請求的響應後啓動對象(解析器)。

什麼是Pythonic,這種情況下的正確方法?

謝謝

回答

6

掛鉤距'魔法'不是一百萬英里。它們會讓你的代碼潛在地做出讓別人感到驚訝的事情(因此違反了「顯式比隱式更好」)。

掛鉤應該因此只能用於驅動行爲,它會使可預測的更多,而不是更少。例如,請求在內部使用它們到handle 401 responses進行各種認證。

因此,您應該受到鉤子限制的指導。 relevant part of the documentation指出掛鉤需要返回一個Response對象。這會導致一些明顯的可能行爲:您可以提出其他請求(如上面的401鉤子),或者您可以以某種方式對Response進行變異。

啓動一個解析器正是你不應該用鉤子做的事情。它應該是你業務邏輯的一部分。我會寫一個實用程序功能。

+1

我不知道別人會說什麼,但這是一個很好的答案。預計不會有更好的一個。希望這裏有更多你的同類。 ;-)非常感謝,非常好! – Phil