工作と競馬2

電子工作、プログラミング、木工といった工作の記録記事、競馬に関する考察記事を掲載するブログ

Python2と3での違いでハマったところをメモ

概要

最近、Python2から3に乗り換えた。多少の違いがあるとのことだったが、多少ではなく結構違いがあってハマったのでメモしておく。必要があれば今後も追記。


詳細

base64.b64encode

bytes, str, unicodeの扱いが変わったことによる差だろうからじっくり考えればわかるのだけど、変わらないだろうと思ったところが変わっているのでハマった。

  • Python2系のとき

b64encodeはunicode文字列をそのまま入れてOK

import base64

x = u"hogehoge"
y = base64.b64encode(x)
  • Python3系のとき

b64encodeには、bytesを食わせる必要がある

import base64

x = "hogehoge".encode("utf-8") # 何らかの文字コードにエンコード
y = base64.b64encode(x)

urllib2

urllib2がなくなっていた。代わりに、urllibを使う。

  • Python2系のとき
import urllib2

req = urllib2.Request(url, data=data, headers=headers)
resp = urllib2.urlopen(req)
  • Python3系のとき

urllib.requestを使う。

import urllib

req = urllib.request.Request(url, data=data, headers=headers)
resp = urllib.request.urlopen(req)