Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как использовать raw_input в Python 3

Автор вопроса: Lonnie PriceОтветов: 9
import sys
print(sys.platform)
print(2**100)
raw_input()

Я использую 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

python

Ответы

Ответ 1 · рейтинг 1103 · balpha

Начиная с Python 3, raw_input() был переименован в input().

Из второго пункта Что нового в Python 3.0, раздел "Встроенные".

Ответ 2 · рейтинг 123 · Cees Timmerman

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

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

Ответ 3 · рейтинг 49 · tacaswell

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

from six.moves import input

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 или аналогичного линтера, вы можете вместо этого использовать следующее:

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

Ответ 6 · рейтинг 6 · ChewbaccaKL

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы