2016-05-13 9 views
-2

私はPythonを初めて使用しています。 urllibを使ってWebページを取得しようとしています。 これは通常のクラスで動作しています。私はコードをクリーンアップして、通常は静的メソッドに置き、他のクラスで呼び出すようにしたいと思います。バイトデコードは静的メソッドでは機能しませんか?

コードが実行されると、プログラムは直ちに停止し、コンソールにエラーコードは表示されません。デコード機能を使用しない場合、エラーはありませんが、データはバイト単位です。

なぜこのようなことが起こったのか誰かに教えてもらえますか?

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

全然、静的メソッドを使用するには、説得力のある理由:

ここ
'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) 

は、はるかに良い答えです。 – miradulo

+0

理由を教えてもらえますか?私は、さまざまなクラスで関数を複数回呼び出すことがあり、時には呼び出すメソッドが1つだけ必要な場合もあります。 – user77177928

+1

以外の空白は使用しないでください。予期したものを捕まえ、受け取ったエラーを追加してください。 –

答えて

-2

代わりにデコード( 'UTF-8')の、このいずれかを試してみてください:

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

しかし、私は、Pythonのリクエスト・ライブラリを使用して、あなたをお勧めしますけれども。エラー処理が改善され、utf-8の内容が簡単になります。

エラーの場合=あなたは、どちらかを選択することができます。 https://stackoverflow.com/a/517974/1463812

+0

ありがとうございますが、動作していません。 – user77177928

+0

これはページが「UTF-8」でないことを意味します。どのURLを共有できますか?それは、ISO-xxxxまたはWindows-xxxでエンコードされたページのいずれかと思われるからです。最初に元のデコードにしたがってデコードしなければならないので、utf-8やその他の設定に従ってエンコードすることができます。 – JSBach

+0

URLはhttps://www.python.org/です。私はそれを静的メソッドに入れないとうまくいきます。デコードを取り除くとエラーなしでバイトが表示されます – user77177928

関連する問題