lisz-works

プログラミングと興味を貴方に

Python3→Python2に修正時のエラー修正方法

【スポンサーリンク】

Python

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系は通ってこなかったので、今回やってみて意外と違うんだなーと感じました。