2013-06-01 50 views
0

我正在開發一個項目,如果在測試過程中我可以剔除urlopen,這將非常方便。有人向我指出,通過嘲笑opener並使用urllib2.install_opener這是可能的(並且容易)。未使用`urllib2.install_opener`危險?

不過,我很擔心,因爲本說明文檔中的:

安裝一個OpenerDirector實例作爲默認的全局開門紅。

這不代表我的程序可能會意外中斷,如果我依賴的其他代碼正在使用urlopen

回答

0

影響正是你所期望的。隨後在您的程序中調用urllib2.urlopen,直到您退出或再次撥打install_opener,將使用您的開瓶器。

這是否「危險」取決於您的使用情況。如果您的代碼的其他部分使用urllib2.open而您不希望他們被嘲笑,那麼是的,這是一個壞主意,因爲他們會被嘲笑。

在這種情況下,您必須獲取待模擬的代碼才能撥打my_opener.open而不是urllib2.open。如果你設計你的代碼來測試,這應該很容易。如果你需要在事後處理代碼,這有點棘手,但是有各種各樣的可能性。例如,如果要模擬給定模塊中的所有呼叫,只需替換foomodule.urllib2 = my_opener並設置my_opener.urlopen = my_opener.open即可。

+0

我明白,使用'install_opener'不是去模擬的方式,我只是想了解使用'install_opener'(假設)的含義。 – NT3RP

+0

@ NT3RP:好的,我已經編輯了希望澄清的答案,但是......你究竟有什麼不明白的地方?你已經知道它改變了「默認的全局開啓者」。這意味着它聽起來像。之後,在程序中任何對urlopen的調用,包括您忘記了自己編寫的代碼或從別處導入的代碼,都會得到該開啓者,直到程序結束。 – abarnert