43

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 は何かを実行する前にコード全体をチェックしているように見えるため、エラーが発生します。

python2 コードが python3 が使用されていることを確認する良い方法はありますか?

4

1 に答える 1

72

Python は、ソース ファイルの実行を開始する前に、ソース ファイルをバイト コンパイルします。ファイル全体を少なくとも正しく解析する必要があります。そうしないと、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 __name__ == "__main__":
    the_real_thing.main()

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

于 2012-06-30T21:20:56.043 に答える