2011-11-25 213 views
0

ValueError: unknown url type in urllib2, though the url is fine if opened in a browser中,有人指出,在調用opener.open()之前,您必須確保傳遞給它的url格式正確(即 - 對於HTTP URL有一個「http://」前綴,用於FTP的「ftp://」等)。確保url格式正確的Python urllib2

這個問題被提煉出來問:「是否可以使用某些內置函數自動處理這種情況,或者我必須對後續字符串連接進行錯誤處理?」換句話說:有沒有一個內置的Python來做到這一點?

但是,這個完善的問題從來沒有回答過,因此在這裏重新提出。做我自己很容易,但爲什麼重新發明車輪是正確的?

回答

3

在Python中,接受和異常相當常見,而不是事先檢查值。因此,像這將是完美的我,也許對於大多數Python程序員:

try: 
    opener.open(url) 
except ValueError,e: 
    # fix url and try again 
    # ... 

但我不知道你想如何不帶前綴自動處理的URL。前綴定義了要使用的協議。如果沒有給出,你會如何「猜測」它?

+0

夠公平的,我的實際使用案例總是在做http URL,所以我不認爲你不能真正從URL中告訴協議。謝謝! –

0

如果你想默認預先設定http://,你真的需要自己做。沒有理由認爲這應該比預先考慮的要好。 gopher:mailto:news: - 有很多協議。

僅僅因爲網頁瀏覽器今天隱藏了其用戶的前綴http://並未使其過時。

+0

作爲跟進,主機名稱後必須至少有一個斜槓。所以'http:// www.google.com'實際上並不是一個合適的URL。不管你的瀏覽器還是網頁服務器都會默默地將你重定向到http:// www.google.com /'。 –

+0

哦,如果你只是打算支持'http://',你可以考慮總是預先考慮它,除非你的url已經以'http://'開頭。 –