& ldquo; Необработанное исключение: имя 'raw_input' не определено & rdquo; - Python [дубликат]

В дополнение к другим правильным ответам вы можете рассмотреть возможность масштабирования ваших значений, чтобы избежать проблем с арифметикой с плавающей запятой.

Например:

var result = 1.0 + 2.0;     // result === 3.0 returns true

... вместо:

var result = 0.1 + 0.2;     // result === 0.3 returns false

Выражение 0.1 + 0.2 === 0.3 возвращает false в JavaScript, но, к счастью, целочисленная арифметика в плавающей запятой является точной, поэтому ошибки с десятичным представлением можно избежать путем масштабирования.

В качестве практического примера, чтобы избежать проблем с плавающей запятой, где точность имеет первостепенное значение, рекомендуется обрабатывать деньги как целое число, представляющее число центов: 2550 центов вместо 25.50 долларов.


1 Дуглас Крокфорд: JavaScript: Хорошие детали: Приложение A - Ужасные части (стр. 105) .

409
задан Martijn Pieters 2 May 2016 в 17:36
поделиться

9 ответов

raw_input() был переименован в input()

Из http://docs.python.org/dev/py3k/whatsnew/3.0.html

762
ответ дан SilentGhost 31 August 2018 в 23:32
поделиться

Вот фрагмент кода, который я ввел в мои скрипты, который я не буду запускать в среде py2 / 3-agnostic:

# Thank you, python2-3 team, for making such a fantastic mess with
# input/raw_input :-)
real_raw_input = vars(__builtins__).get('raw_input',input)

Теперь вы можете использовать real_raw_input. Это довольно дорого, но коротко и легко читаемо.

Теоретически вы можете даже назначить raw_input вместо real_raw_input, но могут быть модули, которые проверяют существование raw_input и ведут себя соответственно. Лучше остаться на безопасной стороне.

5
ответ дан ChewbaccaKL 31 August 2018 в 23:32
поделиться

Переход между 2.x и 3.x не слишком экстремален, но он меняет некоторые вещи. raw_input теперь просто вводится, если вы хотите использовать старый вход, просто выполните:

eval(input())

Так что просто забудьте raw:)

-1
ответ дан Cleve Green 31 August 2018 в 23:32
поделиться

Вероятно, это не лучшее решение, но до того, как я пришел сюда, я просто сделал это на лету, чтобы продолжать работать, не имея быстрого выхода из исследования.

def raw_input(x):
  input(x)

Затем, когда я запускаю raw_input('Enter your first name: ') на сценарий, над которым я работал, он захватывает его, как input().

Возможно, причина не в том, чтобы я этого не обнаружил!

1
ответ дан Danijel-James W 31 August 2018 в 23:32
поделиться

Это работает в Python 3.x и 2.x:

# Fix Python 2.x.
try: input = raw_input
except NameError: pass
print("Hi " + input("Say something: "))
92
ответ дан geoffspear 31 August 2018 в 23:32
поделиться

Решение Timmerman отлично работает при запуске кода, но если вы не хотите получать ошибки Undefined name при использовании pyflakes или аналогичного linter, вы можете использовать следующее:

try:
    import __builtin__
    input = getattr(__builtin__, 'raw_input')
except (ImportError, AttributeError):
    pass
6
ответ дан jmagnusson 31 August 2018 в 23:32
поделиться

В Python 3.xx вам просто нужно input() not raw_input()

13
ответ дан Pulkit Goyal 31 August 2018 в 23:32
поделиться

Надежным способом решения этой проблемы является

from six.moves import input

six - это модуль, который исправляет многие из 2/3 общих точек боли в кодовой базе.

32
ответ дан tacaswell 31 August 2018 в 23:32
поделиться

Как указывали другие, функция raw_input была переименована в input в Python 3.0, и вам действительно будет лучше обслуживать более современную книгу, но я хочу указать, что есть лучшие способы увидеть результат вашего скрипта.

Из вашего описания, я думаю, вы используете Windows, вы сохранили файл .py, а затем вы дважды щелкаете по нему, чтобы запустить Это. Окно терминала, которое всплывает, закрывается, как только заканчивается ваша программа, поэтому вы не можете видеть, каков результат вашей программы. Чтобы решить эту проблему, ваша книга рекомендует добавить оператор raw_input / input, чтобы подождать, пока пользователь нажмет клавишу ввода. Однако, как вы видели, если что-то пойдет не так, например ошибка в вашей программе, этот оператор не будет выполнен, и окно закроется, если вы не сможете понять, что пошло не так. Вам может быть проще использовать командную строку или IDLE.

Использовать командную строку

Когда вы смотрите на окно папки, содержащее вашу программу Python, нажмите и удерживайте нажатой клавишу сдвиг и щелчок правой кнопкой мыши в любом месте области белого фона в окне. В появившемся меню должна содержаться запись «Открыть окно команды здесь». (Я думаю, что это работает в Windows Vista и Windows 7.) Это откроет окно командной строки, которое выглядит примерно так:

    Microsoft Windows [Version 6.1.7601]
    Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

    C:\Users\Weeble\My Python Program>_

Чтобы запустить вашу программу, введите следующее (заменяя имя скрипта ):

    python myscript.py

... и нажмите enter. (Если вы получили сообщение об ошибке, что «python» не является распознанной командой, см. http://showmedo.com/videotutorials/video?name=960000&fromSeriesID=96 ). Когда ваша программа завершается, будет ли он успешно завершен или нет, окно останется открытым и снова появится командная строка для ввода другой команды. Если вы хотите снова запустить свою программу, вы можете нажать стрелку вверх, чтобы вызвать предыдущую введенную команду, и нажмите Enter, чтобы запустить ее снова, вместо того, чтобы каждый раз вводить имя файла.

Использовать IDLE

IDLE - простой редактор программ, который поставляется с Python. Среди других функций он может запускать ваши программы в окне. Щелкните правой кнопкой мыши на файле .py и выберите «Редактировать в IDLE». Когда ваша программа появится в редакторе, нажмите F5 или выберите «Запустить модуль» в меню «Выполнить». Ваша программа будет запускаться в окне, которое остается открытым после завершения вашей программы и в котором вы можете сразу вводить команды Python.

13
ответ дан Weeble 31 August 2018 в 23:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: