Подтвердить что ты не робот

Использование ввода /raw _input в python 2 и 3

Я хотел бы задать приглашение пользователя со следующим вопросом:

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?

4b9b3361

Ответ 1

Привязать raw_input к input в Python 2:

try:
   input = raw_input
except NameError:
   pass

Теперь input также вернет строку в Python 2.


Если вы используете six для записи 2/3 совместимого кода, тогда six.input() указывает на raw_input() в Python 2 и input() в Python 3.

Ответ 2

Обновление: этот метод работает только в том случае, если у вас установлено будущее, а ответы выше намного лучше и более обобщаемы.

Из этот чит-лист существует другой метод, который выглядит более чистым:

# Python 2 and 3:
from builtins import input

Ответ 3

Явно загрузите функцию:

from builtins import input

Затем вы можете использовать input() в python2, а также python3.

Возможно, вам придется установить зависимость:

pip install future

Ответ 4

Я думаю, что лучший способ сделать это -

import six

six.moves.input()

... он будет работать через 2 и 3.

Ответ 5

Это связано с тем, что в python 2 raw_input() принимает все, что указано в stdin, как строку, где as input() сохраняет тип данных данного аргумента (т.е. если данный аргумент имеет тип int, то он останется только int, но не будет преобразован в string, как в случае raw_input()). Это в основном, когда используется 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'> 
>>>

Следовательно, при использовании input() в Python 2 пользователь должен быть осторожным при передаче аргументов. Если вы передаете строку, вам нужно передать ее с цитатой (поскольку 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() вам не нужно беспокоиться о типе данных, передавая аргумент как все, что он принимает как строку. Но да, внутри вашего кода вам нужно позаботиться о соответствующем преобразовании типов.

Чтобы избежать этой дополнительной осторожности, необходимой для input() в Python 2, она была удалена в Python 3. И raw_input() был переименован в input() в Python 3. Функцией input() из Python 2 является не более в Python 3. input() в Python 3 служит для того, что raw_input() служил в Python 2.

Этот пост может быть полезен для подробного понимания.

Ответ 6

Вы можете написать свой код в python2 и использовать futurize или в python3 и использовать pasteurize. Это устраняет сложность мышления о совместимом коде и гарантирует хорошие практики.

Относительно этого конкретного вопроса

from builtins import input

Это именно то, что производят вышеприведенные скрипты.