Python3系で作ったものを、諸事情でPython2.7に対応しなければならないという事案が発生しました。
Python2.7に修正するときに起きた、エラーの修正箇所についてです。
文字コードを示すおまじない
Python3のコードでは、ファイルのフォーマットはUTF-8で、日本語のコメントを使っていました。
しかしPython2系では、コメントなどに日本語を使っている場合
「なんか知らん文字あるんですが」
とエラーを吐いてきます。
コレを防ぐために、ファイルの先頭に
# coding: utf_8
という「このファイルのエンコードはこれです!」と示すおまじないを書く必要があります。
別フォルダの自作ソースのimport
このような構成のとき
─ proj ├─ lib │ └─ sub.py └─ main.py
lib/sub.pyに書かれているSubClassをimportするとき
from lib.sub import SubClass
のように書いてあります。
しかしこれだとエラーします。
そこでlibフォルダ内に、「init.py」という空ファイルを作成することで解決します。
─ proj ├─ lib │ ├─ __init__.py ←NEW! │ └─ sub.py └─ main.py
リストのクリア構文の変更
list型の変数に対して
arr.clear()
としていました。
Python2系には、そもそもclear()がないため
del arr[:]
のようにしてクリアします。
pickleファイルは作り直せ
使っていたソースでは、pickleを使ってデータの保存をしていました。
しかし実行時に「読み込めないよ!」とエラーが出力されました。
1度削除して、pickleファイルを作り直したところ、以降エラーが出ることはありませんでした。
Python3とPython2のpickleでは、データフォーマットか何かが違うのかもしれません。
引数/戻り値の型指定の排除
Python3のコードでは、メソッドの引数や戻り値をしているものがありました。
def test(num: int) -> str:
どうやらこの機能はPython3.5から導入されたものらしいです。
なので軒並み削除することにしました。
参考
コチラを参考にしました。ありがとうございました!
qiita.com qiita.com qiita.com blog.ymyzk.com
あとがき
Python3→Python2に修正時のエラー修正方法でした!
あまり世の中のPython事情は知りませんが、バージョンアップならともかく……
今回はバージョンダウンなのでレアケースかもしれませんね。
Python2系は通ってこなかったので、今回やってみて意外と違うんだなーと感じました。