В чем разница между raw_input()
и input()
в Python 3?
В чем разница между raw_input () и input () в Python 3?
Ответы (6)
Разница в том, что raw_input()
не существует в Python 3.x, а input()
существует. Фактически, старый raw_input()
был переименован в input()
, а старый input()
исчез, но его можно легко смоделировать с помощью eval(input())
. (Помните, что eval()
- зло. Если возможно, постарайтесь использовать более безопасные способы анализа вводимых данных.)
raw_input
. ... Разница, я бы сказал, кардинальная!
- person ivan_pozdeev; 11.02.2015
eval
(и exec
) обычно следует избегать, поскольку они могут представлять угрозу безопасности. Для получения дополнительной информации см. Эвал действительно опасен ветераном SO Недом Батчелдером. И, конечно же, этот совет применим и к старому Python 2 input
.
- person PM 2Ring; 05.11.2017
eval()
, так и для exec()
, но сначала вам нужно понять, почему вы не должны использовать eval()
, прежде чем принимать решение о его использовании.
- person Sven Marnach; 05.11.2017
В Python 2 raw_input()
возвращает строку, а input()
пытается выполнить ввод как выражение Python.
Поскольку получение строки почти всегда было тем, что вам нужно, Python 3 делает это с input()
. Как говорит Свен, если вам когда-нибудь понадобится старое поведение, eval(input())
сработает.
raw_input()
.
- person Martin Thoma; 05.11.2013
Python 2:
raw_input()
берет именно то, что ввел пользователь, и возвращает это в виде строки.input()
сначала беретraw_input()
, а затем также выполняетeval()
.
Основное отличие состоит в том, что input()
ожидает синтаксически правильного оператора python, а raw_input()
- нет.
Python 3:
raw_input()
был переименован вinput()
, поэтому теперьinput()
возвращает точную строку.- Старый
input()
был удален.
Если вы хотите использовать старый input()
, что означает, что вам нужно оценить ввод пользователя как оператор Python, вы должны сделать это вручную, используя eval(input())
.
В 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
.
Я хотел бы добавить немного подробностей к объяснениям, предоставленным всеми для пользователей python 2. raw_input()
, который, как вы уже знаете, оценивает все данные, которые пользователь вводит в виде строки. Это означает, что python даже не пытается снова понять введенные данные. Все, что он будет учитывать, это то, что введенные данные будут строкой, независимо от того, является ли это фактической строкой, int или чем-то еще.
В то время как input()
с другой стороны пытается понять данные, введенные пользователем. Таким образом, ввод типа helloworld
даже покажет ошибку как «helloworld is undefined
».
В заключение, для python 2, чтобы ввести строку, вам необходимо ввести ее как 'helloworld
', что является общей структурой, используемой в python для использования строк.
Если вы хотите убедиться, что ваш код работает с 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")
input
вraw_input
и игнорировать ошибки имени. - person Solomon Ucko   schedule 04.05.2016