Python3でNo module named ‘urllib2’エラーが出たら

Python3でModuleNotFoundError: No module named 'urllib2'のようなエラーが出た場合の解決方法。urllib2はPython2用のモジュールで、3はurllib.requesturllib.errorに分かれていると、解決策が載っているこのサイトに書いてある。以下のコードを例に修正を試みてみる。

コード

import urllib2from urllib.request import urlopenに、from StringIO import StringIOimport ioに書きえ、f = urllib2.urlopenf = urlopenに書き換えれば、とりあえずimport errorは修正される。しかし、コードを実行すると以下のエラーが出る。

     16 raw_data = f.read()
     17 print('Raw data looks like this:')
---> 18 print(raw_data[:100] + '...')

TypeError: can't concat str to bytes

このサイトによると、'...'の前にbを付ければいいらしい。b'...'に書き換えてコードを実行したら無事成功した。

Raw data looks like this:
b'5.1,3.5,1.4,0.2,Iris-setosa\n4.9,3.0,1.4,0.2,Iris-setosa\n4.7,3.2,1.3,0.2,Iris-setosa\n4.6,3.1,1.5,0.2,...'

このサイトによると、b’は、python3に特有で、python2ではb’は付かないらしい。このb’を取り除くには、下記のようにコードを修正する必要がある。

1
2
3
raw_data = (f.read()).decode("utf-8")
print('Raw data looks like this:')
print (raw_data[:100] + '...')

こうすることで以下のようにチュートリアルと同じoutputになる。

Raw data looks like this:
5.1,3.5,1.4,0.2,Iris-setosa
4.9,3.0,1.4,0.2,Iris-setosa
4.7,3.2,1.3,0.2,Iris-setosa
4.6,3.1,1.5,0.2,...

Pythonによるdeep learning programming(深層学習プログラミング)はネット上にチュートリアルがゴロゴロ転がりまくっているのでかなり有り難い。

スポンサーリンク