В чем разница между raw_input () и input () в Python 3?

В чем разница между raw_input() и input() в Python 3?


person pkumar    schedule 06.02.2011    source источник
comment
Как сделать программу, которая принимает входные данные, совместимую как с Python 2, так и с Python 3?   -  person Solomon Ucko    schedule 04.05.2016
comment
Для этого вы пытаетесь установить input в raw_input и игнорировать ошибки имени.   -  person Solomon Ucko    schedule 04.05.2016
comment
Найдите библиотеку 'six' для совместимости с python 2 и 3.   -  person Jack Homan    schedule 03.11.2017


Ответы (6)


Разница в том, что raw_input() не существует в Python 3.x, а input() существует. Фактически, старый raw_input() был переименован в input(), а старый input() исчез, но его можно легко смоделировать с помощью eval(input()). (Помните, что eval() - зло. Если возможно, постарайтесь использовать более безопасные способы анализа вводимых данных.)

person Sven Marnach    schedule 06.02.2011
comment
В чем разница между _1 _...? - Разница в том, что нет raw_input. ... Разница, я бы сказал, кардинальная! - person ivan_pozdeev; 11.02.2015
comment
В Python 2, я полагаю, они предполагали, что программисты хотят на самом деле выполнить как команду, вводимую пользователем, поскольку изначально (я полагаю) запрос ввода от пользователя мог быть только для этого. Но когда они поняли, что программисты также могут захотеть получить необработанный ввод, они разработали другую функцию под названием raw_input. В Python 3 они заметили, что это было глупо, и просто удалили исходное выполнение ввода по умолчанию, получив только одну простую функцию. - person ; 03.04.2015
comment
Repl.it при запуске Py3.5.1 имеет raw_input () в качестве ключевого слова. - person OldBunny2800; 15.08.2016
comment
Следует сказать, что evalexec) обычно следует избегать, поскольку они могут представлять угрозу безопасности. Для получения дополнительной информации см. Эвал действительно опасен ветераном SO Недом Батчелдером. И, конечно же, этот совет применим и к старому Python 2 input. - person PM 2Ring; 05.11.2017
comment
@ PM2Ring Я добавил к ответу предупреждение. Конечно, существуют допустимые варианты использования как для eval(), так и для exec(), но сначала вам нужно понять, почему вы не должны использовать eval(), прежде чем принимать решение о его использовании. - person Sven Marnach; 05.11.2017
comment
Стоит отметить, что это все еще дорабатывается, документы показывают, что Py34 и Py36 претерпели изменения в обработке базовых int: [ссылка] docs.python.org/3/library/functions.html#input - person MJM; 24.07.2018

В Python 2 raw_input() возвращает строку, а input() пытается выполнить ввод как выражение Python.

Поскольку получение строки почти всегда было тем, что вам нужно, Python 3 делает это с input(). Как говорит Свен, если вам когда-нибудь понадобится старое поведение, eval(input()) сработает.

person Thomas K    schedule 06.02.2011
comment
Вы должны добавить, что в Python 3 нет raw_input(). - person Martin Thoma; 05.11.2013
comment
Какая польза от ввода в виде выражения Python? - person Akshay Vijay Jain; 11.08.2017
comment
@AkshayVijayJain, вероятно, он предназначался для ввода чисел. Но это совершенно небезопасно. - person MarSoft; 20.10.2017

Python 2:

  • raw_input() берет именно то, что ввел пользователь, и возвращает это в виде строки.

  • input() сначала берет raw_input(), а затем также выполняет eval().

Основное отличие состоит в том, что input() ожидает синтаксически правильного оператора python, а raw_input() - нет.

Python 3:

  • raw_input() был переименован в input(), поэтому теперь input() возвращает точную строку.
  • Старый input() был удален.

Если вы хотите использовать старый input(), что означает, что вам нужно оценить ввод пользователя как оператор Python, вы должны сделать это вручную, используя eval(input()).

person screenglow    schedule 28.02.2013

В Python 3 raw_input() не существует, о чем уже упоминал Свен.

В Python 2 функция input() оценивает ваш ввод.

Пример:

name = input("what is your name ?")
what is your name ?harsha

Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    name = input("what is your name ?")
  File "<string>", line 1, in <module>
NameError: name 'harsha' is not defined

В приведенном выше примере Python 2.x пытается оценить harsha как переменную, а не строку. Чтобы этого избежать, мы можем заключить наш ввод в двойные кавычки, например "harsha":

>>> name = input("what is your name?")
what is your name?"harsha"
>>> print(name)
harsha

raw_input ()

Функция raw_input () `не оценивает, она просто считывает все, что вы вводите.

Пример:

name = raw_input("what is your name ?")
what is your name ?harsha
>>> name
'harsha'

Пример:

 name = eval(raw_input("what is your name?"))
what is your name?harsha

Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    name = eval(raw_input("what is your name?"))
  File "<string>", line 1, in <module>
NameError: name 'harsha' is not defined

В приведенном выше примере я просто пытался оценить ввод пользователя с помощью функции eval.

person hackwithharsha    schedule 30.12.2015

Я хотел бы добавить немного подробностей к объяснениям, предоставленным всеми для пользователей python 2. raw_input(), который, как вы уже знаете, оценивает все данные, которые пользователь вводит в виде строки. Это означает, что python даже не пытается снова понять введенные данные. Все, что он будет учитывать, это то, что введенные данные будут строкой, независимо от того, является ли это фактической строкой, int или чем-то еще.

В то время как input() с другой стороны пытается понять данные, введенные пользователем. Таким образом, ввод типа helloworld даже покажет ошибку как «helloworld is undefined».

В заключение, для python 2, чтобы ввести строку, вам необходимо ввести ее как 'helloworld', что является общей структурой, используемой в python для использования строк.

person Rubal    schedule 15.06.2015

Если вы хотите убедиться, что ваш код работает с python2 и python3, используйте функцию input () в своем скрипте и добавьте это в начало вашего скрипта:

from sys import version_info
if version_info.major == 3:
    pass
elif version_info.major == 2:
    try:
        input = raw_input
    except NameError:
        pass
else:
    print ("Unknown python version - input function not safe")
person Josef Klotzner    schedule 15.02.2019