В чем разница между raw_input()
и input()
в Python 3?
input
в raw_input
и игнорировать ошибки имен.
В чем разница между raw_input()
и input()
в Python 3?
input
в raw_input
и игнорировать ошибки имен.
Ответы:
Разница в том, что raw_input()
не существует в Python 3.x, а input()
существует. На самом деле старое raw_input()
было переименовано input()
, а старое input()
исчезло, но его можно легко смоделировать с помощью eval(input())
. (Помните, что eval()
это зло. Попытайтесь использовать более безопасные способы анализа вашего ввода, если это возможно.)
raw_input
...?" - «Разница в том, что нет raw_input
». ... Я бы сказал, что это довольно радикальная разница!
eval
(и exec
) в целом следует избегать, поскольку они могут представлять угрозу безопасности. За подробностями обращайтесь к Eval, который действительно опасен для SO ветеран Нед Бэтчелдер. И, конечно, этот совет относится и к старому Python 2 input
.
eval()
и exec()
, но сначала вы должны понять, почему вы не должны использовать, eval()
прежде чем принять решение использовать его.
В Python 2 , raw_input()
возвращает строку, и input()
пытается выполнить вход в качестве выражения Python.
Поскольку получение строки почти всегда было тем, что вы хотели, Python 3 делает это с input()
. Как говорит Свен, если вы когда-нибудь захотите старое поведение, eval(input())
работает.
raw_input()
.
raw_input()
берет именно то, что набрал пользователь, и передает его обратно в виде строки.
input()
сначала берет, raw_input()
а затем выполняет eval()
на нем также.
Основным отличием является то, что input()
ожидает синтаксически правильное выражение Python, где raw_input()
нет.
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 () `не оценивает, она просто читает все, что вы вводите.
Пример:
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")