В чем разница между raw_input() и input() в Python 3?
Вопрос
В чем разница между raw_input () и input () в Python 3?
- Как сделать программу, которая принимает входные данные, совместимую как с Python 2, так и с Python 3? Solomon Ucko 04.05.2016
- Для этого вы пытаетесь установить input в raw_input и игнорировать ошибки имени. Solomon Ucko 04.05.2016
- Найдите библиотеку 'six' для совместимости с python 2 и 3. Jack Homan 03.11.2017
Ответы
Ответ 1 · рейтинг 437 · Sven Marnach
Разница в том, что raw_input() не существует в Python 3.x, а input() существует. Фактически, старый raw_input() был переименован в input(), а старый input() исчез, но его можно легко смоделировать с помощью eval(input()). (Помните, что eval() - зло. Если возможно, постарайтесь использовать более безопасные способы анализа вводимых данных.)
Ответ 2 · рейтинг 195 · Thomas K
В Python 2 raw_input() возвращает строку, а input() пытается выполнить ввод как выражение Python.
Поскольку получение строки почти всегда было тем, что вам нужно, Python 3 делает это с input(). Как говорит Свен, если вам когда-нибудь понадобится старое поведение, eval(input()) сработает.
Ответ 3 · рейтинг 120 · screenglow
Python 2
raw_input()берет именно то, что ввел пользователь, и возвращает это в виде строки.input()сначала беретraw_input(), а затем также выполняетeval().
Основное отличие состоит в том, что input() ожидает синтаксически правильного оператора python, а raw_input() - нет.
Python 3
raw_input()был переименован вinput(), поэтому теперьinput()возвращает точную строку.- Старый
input()был удален.
Если вы хотите использовать старый input(), что означает, что вам нужно оценить ввод пользователя как оператор Python, вы должны сделать это вручную, используя eval(input()).
Ответ 4 · рейтинг 29 · hackwithharsha
В 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.
Ответ 5 · рейтинг 7 · Rubal
Я хотел бы добавить немного подробностей к объяснениям, предоставленным всеми для пользователей python 2. raw_input(), который, как вы уже знаете, оценивает все данные, которые пользователь вводит в виде строки. Это означает, что python даже не пытается снова понять введенные данные. Все, что он будет учитывать, это то, что введенные данные будут строкой, независимо от того, является ли это фактической строкой, int или чем-то еще.
В то время как input() с другой стороны пытается понять данные, введенные пользователем. Таким образом, ввод типа helloworld даже покажет ошибку как "helloworld is undefined".
В заключение, для python 2, чтобы ввести строку, вам необходимо ввести ее как 'helloworld', что является общей структурой, используемой в python для использования строк.
Ответ 6 · рейтинг 4 · Josef Klotzner
Если вы хотите убедиться, что ваш код работает с 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")
Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.
Похожие материалы
- Найти все нули с помощью SQL-запроса поверх кадра данных pyspark
- Scrapy ползает, но не царапает
- Передача URL-адреса ответа Scrapy в Selenium, а затем ответа Selenium обратно в Scrapy
- Решили ли дизайнеры hdf5 проблему повреждения, связанную с открытием файлов .hdf5?
- Самые популярные фреймворки Python: обзор | Ронас ИТ
- Введение в контроль версий данных