web-dev-qa-db-ja.com

python 2コード:if python 3 then sys.exit()

Python 2のみの大きなコードがあります。最初にPython 3をチェックし、python3が使用されている場合は終了します。だから私は試しました:

import sys

if sys.version_info >= (3,0):
    print("Sorry, requires Python 2.x, not Python 3.x")
    sys.exit(1)

print "Here comes a lot of pure Python 2.x stuff ..."
### a lot of python2 code, not just print statements follows

ただし、終了は発生しません。出力は次のとおりです。

$ python3 testing.py 
  File "testing.py", line 8
        print "Here comes a lot of pure Python 2.x stuff ..."
                                                        ^
SyntaxError: invalid syntax

したがって、pythonは、何かを実行する前にwholeコードをチェックするように見えるため、エラーが発生します。

Python2コードが使用されているpython3をチェックし、そうであれば何かフレンドリーなものを印刷して終了する素敵な方法はありますか?

38
superkoning

Pythonは、実行を開始する前にソースファイルをバイトコンパイルします。ファイル全体は少なくともparse正しくなければなりません。そうでなければ、SyntaxErrorを取得します。

あなたの問題の最も簡単な解決策は、Python 2.xと3.xの両方として解析する小さなラッパーを書くことです。例:

import sys
if sys.version_info >= (3, 0):
    sys.stdout.write("Sorry, requires Python 2.x, not Python 3.x\n")
    sys.exit(1)

import the_real_thing
if __== "__main__":
    the_real_thing.main()

ステートメントimport the_real_thingafterifステートメントのみ実行されるため、このモジュールのコードはPython 3.xコードとして解析する必要はありません。

64
Sven Marnach