VS Codeでデバッグしている時は正しく動くのに、pyファイルをダブルクリックしたら動かないという事象に見舞われました。
結論としては、VS Code上ではPython 3.x系が動いていて、ダブルクリックによる実行時には2.xが動いていたためでした。
よって、どちらのバージョンにも対応できるような方法を考えた話です。
input関数の仕様が違う
Python 2.x系と3.x系ではinput関数の仕様が違います。
Python 2.xの場合、input関数を普通に呼んでしまうと、ユーザ入力値は数値として扱われます。
そのため、文字列を扱いたい場合には、
raw_input
という別の関数が用意されています。
3.x系になるとこの2つはinput
に統合されました。
以上の理由から、Python 2.x系と3.x系で処理を分けてあげる必要があります。
実行されているPythonのバージョンを取得
Pythonのバージョンを取得する方法は以下です。
test.py
import sys
PYTHON_VERSION = sys.version_info.major #一応定数として入れておく
バージョンを区別
今回はinput関数を使うので、関数をラッピングします。
test.py
def char_input( text ):
if PYTHON_VERSION == 2:
return raw_input( text ) #Python 2.x
else:
return input( text ) #Python 3.x
これで、char_input
関数を使えば、どちらのバージョンにでも対応できます。
おわりに
これ、結構ハマりました・・・
最初try文でトラップして、調べていくうちにinput
が原因だと分かりました。
VS Codeのデバッガでは普通に動いていたのでおかしいなーと。
たまたま自分のPCに以前使っていたPython2.x系がインストールされていたためここに気づきましたが、
こういったバージョンの違いによる対応をしてあげるのが親切ですね。