Я получаю сообщение об ошибке при попытке запустить этот простой скрипт:
input_variable = input ("Enter your name: ")
print ("your name is" + input_variable)
Допустим, я набираю "чувак", ошибка, которую я получаю:
line 1, in <module>
input_variable = input ("Enter your name: ")
File "<string>", line 1, in <module>
NameError: name 'dude' is not defined
Я запускаю эти скрипты с Python 2.7.
python
python-2.7
input
nameerror
chillpenguin
источник
источник
input
вести себя так, но только в 2.7. Что он говорит, когда вы запускаетеpython --version
из командной строки? В качестве альтернативы, что если вы напишитеimport sys; print(sys.version)
в начале вашего сценария?import sys
и второй строкиprint(sys.version_info)
, чтобы определить, какую версию вы используете.Ответы:
TL; DR
input
Функция в Python 2.7, оценивает все, что вы вводите, как выражение Python. Если вы просто хотите читать строки, используйтеraw_input
функцию в Python 2.7, которая не будет оценивать прочитанные строки.Если вы используете Python 3.x,
raw_input
был переименован вinput
. Цитируя заметки о выпуске Python 3.0 ,В Python 2.7 есть две функции, которые можно использовать для приема пользовательских данных. Один есть,
input
а другой естьraw_input
. Вы можете думать об отношениях между ними следующим образомРассмотрим следующий фрагмент кода, чтобы лучше это понять
input
принимает строку от пользователя и оценивает строку в текущем контексте Python. Когда я печатаю вdude
качестве ввода, он обнаруживает, чтоdude
привязан к значению,thefourtheye
и поэтому результат оценки становитсяthefourtheye
и ему присваиваетсяinput_variable
.Если я введу что-то еще, чего нет в текущем контексте Python, произойдет сбой
NameError
.Вопросы безопасности с Python 2.7
input
:Поскольку любые типы пользователей оцениваются, это также создает проблемы безопасности. Например, если вы уже загрузили
os
модуль в свою программуimport os
, а затем пользователь вводитэто будет оценено как Python как выражение вызова функции, и оно будет выполнено. Если вы выполняете Python с повышенными привилегиями,
/etc/hosts
файл будет удален. Видите, насколько это может быть опасно?Чтобы продемонстрировать это, давайте попробуем снова выполнить
input
функцию.Теперь, когда
input("Enter your name: ")
выполняется, он ожидает ввода пользователя, и ввод пользователя является допустимым вызовом функции Python, поэтому он также вызывается. Вот почему мыEnter your name again:
снова видим подсказку.Итак, вам лучше с
raw_input
функцией, как этоЕсли вам нужно преобразовать результат в какой-то другой тип, то вы можете использовать соответствующие функции для преобразования возвращаемой строки
raw_input
. Например, чтобы прочитать входные данные как целые числа, используйтеint
функцию, как показано в этом ответе .В Python 3.x есть только одна функция для получения пользовательского ввода, и она вызывается
input
, что эквивалентно Python 2.7raw_input
.источник
Вы используете Python 2, а не Python 3. Чтобы это работало в Python 2, используйте
raw_input
.источник
Поскольку вы пишете для Python 3.x, вы захотите начать свой сценарий с:
Если вы используете:
По умолчанию будет установлен Python 2.x. Они идут в первой строке вашего скрипта, если ничего не начинается с #! (он же Шебанг).
Если ваши сценарии начинаются с:
Затем вы можете изменить его на:
Хотя это более короткое форматирование распознается только несколькими программами, например, лаунчером, это не лучший выбор.
Первые два примера гораздо более широко используются и помогут гарантировать, что ваш код будет работать на любой машине, на которой установлен Python.
источник
Вы должны использовать,
raw_input
потому что вы используете Python-2.7. Когда вы используетеinput()
переменную (например:)s = input('Name: ')
, она выполнит команду ПО среды Python без сохранения того, что вы написали в переменной (s
), и создаст ошибку, если то, что вы написали, не определено.raw_input()
правильно сохранит то, что вы написали для переменной (например:)f = raw_input('Name : ')
, и не выполнит ее в среде Python без создания возможной ошибки:источник
Для питона 3 и выше
это решит проблему в Pycharm IDE, если вы решаете на сайте точно хакерранк, то используйте:
источник
Вы можете сделать:
или:
источник
Вы должны вводить ввод в одинарных или двойных кавычках
источник
Я также столкнулся с этой проблемой с модулем, который должен был быть совместимым для Python 2.7 и 3.7
то, что я нашел, чтобы исправить проблему, было импортировать:
это исправило удобство использования для обоих переводчиков
Вы можете прочитать больше о шести библиотеках здесь
источник
Мы используем следующее, которое работает как Python 2 и Python 3
источник
Для всех, кто может столкнуться с этой проблемой, оказывается, что даже если вы включите
#!/usr/bin/env python3
в начале вашего сценария, shebang игнорируется, если файл не является исполняемым.Чтобы определить, является ли ваш файл исполняемым:
./filename.py
из командной строки-bash: ./filename.py: Permission denied
, бегиchmod a+x filename.py
./filename.py
сноваЕсли вы включили,
import sys; print(sys.version)
как предложил Кевин, теперь вы увидите, что скрипт интерпретируется python3источник
Хорошие вклады предыдущих.
Спасибо!
источник
Вы можете изменить, какой Python вы используете в IDE, если вы уже загрузили Python 3.x, переключать его не должно быть слишком сложно. Но ваш скрипт отлично работает на Python 3.x, я бы просто изменил
в
Потому что с запятой он печатает с пробелом между
your name is
и тем, что вводил пользователь. И: если вы используете 2.7, просто используйтеraw_input
вместо ввода.источник
Есть два способа исправить эти проблемы,
Первый простой без изменения кода, который
запускает ваш скрипт на Python3,
если вы все еще хотите работать на python2, то после запуска вашего скрипта на python, когда вы вводите ввод, имейте в виду
string
тогда просто начните вводить «ввод идет с двойной кавычкой», и это будет работать в python2.7 и2-й способ - с изменениями кода
используйте приведенный ниже импорт и работайте с любой версией python
from six.moves import input
raw_input()
функцию вместоinput()
функции в вашем коде с любым импортомstr()
функции вроде,str(input())
а затем назначить любую переменнуюКак следует из ошибки :
имя «чувак» не определено, т. Е. Для питона «чувак» становится здесь переменной, и ему не присваивается какое-либо значение определенного типа Python,
поэтому он только плачет, как ребенок, поэтому, если мы определим переменную «чувак» и присвоим любое значение и перейдем к нему, это будет работать, но это не то, что мы хотим, так как мы не знаем, какой пользователь войдет, и более того, мы хотим захватить ввод пользователя.
источник