Я использую Python 3.1 и не могу заставить raw_input "заморозить" всплывающее окно dos. Книга, которую я читаю, предназначена для Python 2.5, а я использую Python 3.1.
Что мне делать, чтобы это исправить?
хм, я получаю NameError: имя raw_input не определено, когда я пытаюсь использовать ваш код. разве у тебя не получается то же самое? SilentGhost 05.06.2009
Ознакомьтесь с docs.python.org/library/2to3.html и docs.python.org/3.0/whatsnew/3.0.html MatrixFrog 07.06.2009
В Python 3 многое изменилось, поэтому, вероятно, вам не стоит пытаться освоить его, используя книгу для 2.5 (которая действительно устарела). Niklas B. 06.09.2011
raw_input был переименован в input в python 3 krystan honour 15.02.2015
Получение ошибки http 401 при переходе по ссылке Oauth2 Big Ian 08.02.2020
six - это модуль, который устраняет многие из 2/3 общих проблемных точек базового кода.
Ответ 4 · рейтинг 16 · Weeble
Как указывали другие, функция raw_input была переименована в input в Python 3.0, и вам действительно было бы лучше обслуживаться более современной книгой, но я хочу указать, что есть лучшие способы увидеть результат ваш сценарий.
Судя по вашему описанию, я думаю, что вы используете Windows, вы сохранили .py файл, а затем дважды щелкаете по нему, чтобы запустить. Всплывающее окно терминала закрывается, как только ваша программа завершается, поэтому вы не можете увидеть, каков был результат вашей программы. Чтобы решить эту проблему, ваша книга рекомендует добавить оператор raw_input / input, чтобы ждать, пока пользователь не нажмет клавишу ввода. Однако, как вы видели, если что-то пойдет не так, например, ошибка в вашей программе, этот оператор не будет выполнен, и окно закроется, и вы не сможете увидеть, что пошло не так. Возможно, вам будет проще использовать командную строку или IDLE.
Используйте командную строку
Когда вы смотрите на окно папки, содержащее вашу программу Python, удерживайте нажатой клавишу Shift и щелкните правой кнопкой мыши в любом месте белого фона окна. Во всплывающем меню должна содержаться запись "Открыть командное окно здесь". (Я думаю, что это работает в 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
... и нажмите ввод. (Если вы получите сообщение об ошибке "python" не распознанная команда, см. http://showmedo.com/videotutorials/video?name=960000&fromSeriesID=96) Когда ваша программа завершит работу, независимо от того, завершилась она успешно или нет, окно останется открытым, и снова появится командная строка, чтобы вы могли ввести другую команду. Если вы хотите снова запустить свою программу, вы можете нажать стрелку вверх, чтобы вызвать предыдущую введенную вами команду, и нажать Enter, чтобы запустить ее снова, вместо того, чтобы каждый раз вводить имя файла.
Использовать IDLE
IDLE - это простой редактор программ, который устанавливается вместе с Python. Среди других функций он может запускать ваши программы в окне. Щелкните правой кнопкой мыши свой .py файл и выберите "Редактировать в IDLE". Когда ваша программа появится в редакторе, нажмите F5 или выберите "Выполнить модуль" в меню "Выполнить". Ваша программа будет работать в окне, которое остается открытым после завершения вашей программы и в котором вы можете вводить команды Python для немедленного запуска.
Ответ 5 · рейтинг 7 · jmagnusson
Решение Тиммермана отлично работает при запуске кода, но если вы не хотите получать Undefined name ошибки при использовании pyflakes или аналогичного линтера, вы можете вместо этого использовать следующее:
Вот фрагмент кода, который я вставил в свои сценарии, который я не хочу запускать в среде, не зависящей от py2 / 3:
# 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 и ведут себя соответствующим образом. Лучше перестраховаться.
Ответ 7 · рейтинг 1 · Danijel-James W
Возможно, не лучшее решение, но до того, как я приехал сюда, я просто делал это на лету, чтобы продолжать работать, не делая быстрого перерыва в учебе.
def raw_input(x):
input(x)
Затем, когда я запускаю raw_input('Enter your first name: ') сценарий, над которым работал, он захватывает его, как и input().
Может быть причина не делать этого, с которой я еще не сталкивался!
Ответ 8 · рейтинг 1 · George Birbilis
Как насчет следующего? Должен позволить вам использовать либо raw_input, либо input как в Python2, так и в Python3 с семантикой raw_input Python2 (также известной как семантика ввода Python3)
# raw_input isn't defined in Python3.x, whereas input wasn't behaving like raw_input in Python 2.x
# this should make both input and raw_input work in Python 2.x/3.x like the raw_input from Python 2.x
try: input = raw_input
except NameError: raw_input = input
Ответ 9 · Zeerx7 v
по-другому вы можете сделать это так, создав новую функцию.
import platform
def str_input(str=''):
py_version = platform.python_version() # fetch the python version currently in use
if int(py_version[0]) == 2:
return raw_input(str) # input string in python2
if int(py_version[0]) == 3:
return input(str) # input string in python3
как использовать:
str_input("Your Name: ")
Я использую это, когда хочу создавать сценарии и входные данные, которые можно запускать в python2 и python3.