Как использовать raw-ввод в Python 3

import sys
print (sys.platform)
print (2 ** 100)
raw_input( )

Я использую Python 3.1 и не могу заставить raw_input "заморозить" всплывающее окно dos. Книги я читаю для 2.5 и я использую 3.1

что я должен сделать, чтобы исправить это?

8 ответов


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

от http://docs.python.org/dev/py3k/whatsnew/3.0.html


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

# Fix Python 2.x.
try: input = raw_input
except NameError: pass
print("Hi " + input("Say something: "))

надежный способ решить эту проблему -

from six.moves import input

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


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


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

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

используйте командную строку

когда вы смотрите на окно папку содержит вашу программу 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

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

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

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


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

try:
    import __builtin__
    input = getattr(__builtin__, 'raw_input')
except (ImportError, AttributeError):
    pass

вот фрагмент кода, который я вставил в свои скрипты, который я не хочу запускать в 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-ввода обычно дорого стоит времени (ожидание ввода), поэтому это не важно.

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


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

def raw_input(x):
  input(x)

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

может быть причина не делать этого,что я еще не сталкивался!