2016-05-13 18 views
-2

我是python新手。 我正在嘗試使用urllib來獲取網頁。 這是正常的課程。我想清理代碼,所以我通常把它們放到靜態方法中,並在其他類中調用它們。字節解碼在靜態方法中不起作用?

當代碼執行時,程序立即停止,控制檯中沒有錯誤代碼。如果我不使用解碼功能,則不會出現錯誤,但數據以字節爲單位。

有人能告訴我爲什麼會發生這種情況嗎?

import sys 
import urllib.request 

class AppTool(): 

    @staticmethod 
    def getURL(URL): 
     result = "" 

     try: 
      request = urllib.request.Request(URL) 
      response = urllib.request.urlopen(request) 
      result = response.read().decode('utf-8') 
      print("result : {}".format(result)) 

     except: 
      print("Error: {}".format(sys.exc_info())) 

     return result 
+1

沒有一個令人信服的理由是使用靜態方法,在所有。 – miradulo

+0

你能告訴我爲什麼嗎?我在不同的類中多次調用函數,有時我只需要一種方法來調用。 – user77177928

+1

請勿使用空格,除非發現您期望的內容並添加收到的錯誤。 –

回答

-2

試試這一個,而不是解碼( 'UTF-8'):

response.read().decode('utf-8', errors='ignore') 

然而,儘管我會建議你使用python的請求庫。它具有更好的錯誤處理能力,並且讓你的utf-8內容更容易。

錯誤=您可以選擇:

'strict': raise an exception in case of an encoding error 
'replace': replace malformed data with a suitable replacement marker, such as '?' or '\ufffd' 
'ignore': ignore malformed data and continue without further notice 
'xmlcharrefreplace': replace with the appropriate XML character reference (for encoding only) 
'backslashreplace': replace with backslashed escape sequences (for encoding only) 

這是一個更好的答案: https://stackoverflow.com/a/517974/1463812

+0

謝謝,但它不起作用。 – user77177928

+0

它表示頁面不在「UTF-8」中。你可以分享哪個網址?因爲它看起來可能是ISO-xxxx或Windows-xxx編碼頁面之一。在那裏你必須首先根據原始的編碼進行解碼,然後你可以根據你的utf-8或任何偏好進行編碼。 – JSBach

+0

網址是https://www.python.org/。它工作,如果我不把它放在靜態方法,如果我刪除解碼,我可以看到字節沒有錯誤 – user77177928

相關問題