web-dev-qa-db-ja.com

python 2および3でのinput / raw_inputの使用

ユーザープロンプトに次の質問を設定します。

_save_flag is not set to 1; data will not be saved. Press enter to continue.
_

input()はpython3では動作しますが、python2では動作しません。 raw_input()はpython2では動作しますが、python3では動作しません。コードがpython 2とpython 3?

39
218

_raw_input_をinputにPython 2:

_try:
    input = raw_input
except NameError:
    pass
_

これで、inputはPython 2でも文字列を返します。


six を使用して2/3互換コードを記述している場合、six.input()raw_input() in Python 2およびinput() in Python 3。

51

これを行う最善の方法は

import six

six.moves.input()

... 2と3で機能します。

7
jdborg

更新:この方法は、将来インストールする場合にのみ機能し、上記の回答ははるかに優れており、より一般化できます。

this cheatsheet よりきれいに見える別のメソッドがあります:

# Python 2 and 3:
from builtins import input
5
emschorsch

Python2でコードを記述して futurize を使用するか、python3でコードを記述して pasteurize を使用できます。これにより、互換性のあるコードについて考える複雑さがなくなり、優れたプラクティスが保証されます。

この特定の質問について

from builtins import input

上記のスクリプトが生成するものです。

1
gbonetti

関数を明示的にロードします。

_from builtins import input_

すると、python2とpython3でinput()を使用できます。

依存関係をインストールする必要がある場合があります。

_pip install future_

1
AlexG

これは、python 2で、raw_input()が文字列としてstdinに与えられたすべてを受け入れ、input()が与えられた引数のデータ型を保持するためです(つまり、与えられた引数がint型の場合、 intのみとして残りますが、raw_input()の場合のようにstringに変換されません。つまり、input()を使用すると、stdinで指定された引数を文字列として受け取り、同じものを評価します。そして、この評価は引数を対応する型に変換します。

_# Python 2.7.6
>>> a = raw_input("enter :- ")
enter :- 3
>>> type(a)     # raw_input() converts your int to string
<type 'str'>
>>> a = input("enter :- ")
enter :- 3
>>> type(a)    # input() preserves the original type, no conversion     
<type 'int'> 
>>>
_

したがって、Python 2でinput()を使用する場合、ユーザーは引数を渡すときに注意する必要があります。文字列を渡す場合は、引用符で渡す必要があります(pythonは引用符内の文字を文字列として認識するため)。それ以外の場合はNameErrorがスローされます。

_ >>> a = input("enter name :- ")
 enter name :- Derrick
 Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "<string>", line 1, in <module>
 NameError: name 'Derrick' is not defined
 >>> a = input("enter name :- ")
 enter name :- 'Derrick'
 >>> a
 'Derrick'
_

一方、raw_input()を使用する場合、引数として文字列として受け入れるすべての引数を渡す際に、データ型について心配する必要はありません。ただし、コード内で適切な型変換を行う必要があります。

Python 2のinput()に必要なこの余分な注意を避けるため、Python 3で削除されました。また、Python 3.でraw_input()input()に名前が変更されました。 Python 2のinput()の機能は、Python 3にはもうありません。Python 3のinput()は、Pythonでraw_input()が提供していたものを提供します。

この投稿 は、詳細な理解に役立つ場合があります。

1
Pabitra Pati