24

ファイルパスを取得するための下位互換性のあるinput()呼び出しを作成するための提案があるかどうか疑問に思っていましたか?

Python 2.xでは、raw_inputは/ path / to/fileのような入力に対して正常に機能しました。この場合、入力の使用は3.xで正常に機能しますが、評価動作のために2.xでは文句を言います。

1つの解決策は、Pythonのバージョンを確認し、バージョンに基づいて、inputまたはraw_input新しい関数にマップすることです。

if sys.version_info[0] >= 3:
    get_input = input
else:
    get_input = raw_input

しかし、これを行うためのより良い方法があると確信しています。誰か提案がありますか?

4

4 に答える 4

34

の Python 2.x バージョンinput()は本質的に役に立たないため、次のように単純に上書きできますraw_input

try:
    input = raw_input
except NameError:
    pass

一般に、私は Python 2.x と 3.x の両方で動作するコードを目指すのではなく、2.x で動作するようにコードを記述し、動作する 3.x バージョンを取得します。スクリプトを使用し2to3ます。

于 2011-05-03T11:08:24.850 に答える
14

このコードは現在、多くの Python 教育およびトレーニング プログラムで教えられています。

通常一緒に教えられること:

from __future__ import print_function
if hasattr(__builtins__, 'raw_input'):
    input = raw_input

最初の行: Python 3.xprint()関数を Python 2.7 にインポートするためprint()、両方のバージョンの Python で同じように動作します。print "some content"古い呼び出しが原因でコードが壊れる場合は、この行を省略できます。

2 行目と 3 行目: Python 2.7raw_input()を設定して、両方のバージョンの Python で問題なく使用できるようにしますinput()input()これがコードに含めたい唯一の互換性修正プログラムである場合、これは単独で使用できます。

from __future__他の言語の互換性の問題については、Python.org サイトで利用可能なインポートが他にもあります。他の問題に対処するときに互換性ソリューションを検索できる「six」というライブラリもあります。

于 2017-05-18T16:52:51.660 に答える
1

お手入れの仕方はまぁまぁです。モジュールを使用する方法はおそらくもっと似ていsysますが、プログラムで文字列やファイルを使って些細なことを行っている場合は、下位互換性のある python3 プログラムを使用する代わりに、プログラムの 2 つのバージョンを使用することをお勧めします。 .

于 2011-05-03T11:22:25.530 に答える
1

関数をインポートできます:

from builtins import input

残念ながら、このメソッドには外部依存関係が必要ですpip install future

于 2017-06-12T22:03:52.880 に答える