web-dev-qa-db-fra.com

Comment utiliser raw_input dans Python 3

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

J'utilise Python 3.1 et je ne peux pas obtenir le raw_input pour "geler" la fenêtre contextuelle. Le livre que je lis est pour Python 2.5 et j'utilise Python 3.1

Que dois-je faire pour résoudre ce problème?

497
Lonnie Price

raw_input() a été renommé en input()

From Nouveautés de Python 3. .

928
balpha

Cela fonctionne dans Python 3.x et 2.x:

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

Un moyen fiable de résoudre ce problème est

from six.moves import input

six est un module qui corrige la plupart des 2/3 points douloureux courants de la base de code.

41
tacaswell

Dans Python 3.xx, vous avez simplement besoin de input() pas raw_input()

17
Efs

Comme d'autres l'ont indiqué, la fonction raw_input a été renommée en input dans Python 3.0, et vous seriez mieux servi par un livre plus récent, mais je tiens à souligner qu'il existe de meilleures façons de voir la sortie de votre script.

D'après votre description, je pense que vous utilisez Windows, vous avez enregistré un fichier .py puis vous double-cliquez dessus pour l'exécuter. La fenêtre du terminal qui s'ouvre se ferme dès la fin de votre programme. Vous ne pouvez donc pas voir le résultat de votre programme. Pour résoudre ce problème, votre livre recommande l'ajout d'une instruction raw_input/input à attendre jusqu'à ce que l'utilisateur appuie sur Entrée. Cependant, comme vous l'avez vu, si quelque chose ne va pas, par exemple une erreur dans votre programme, cette instruction ne sera pas exécutée et la fenêtre se fermera sans que vous ne puissiez voir ce qui s'est mal passé. Vous trouverez peut-être plus facile d'utiliser une invite de commande ou IDLE.

Utilisez une invite de commande

Dans la fenêtre du dossier contenant votre programme Python, maintenez la touche Maj enfoncée, puis cliquez avec le bouton droit de la souris dans la zone d’arrière-plan blanc de la fenêtre. Le menu qui apparaît devrait contenir une entrée "Ouvrir la fenêtre de commande ici". (Je pense que cela fonctionne sur Windows Vista et Windows 7.) Cela ouvrira une fenêtre d'invite de commande qui ressemble à ceci:

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

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

Pour exécuter votre programme, tapez ce qui suit (en remplaçant votre nom de script):

    python myscript.py

... et appuyez sur Entrée. (Si vous obtenez une erreur indiquant que "python" n'est pas une commande reconnue, voir http://showmedo.com/videotutorials/video?name=960000&fromSeriesID=96 ) Lorsque votre programme est en cours d'exécution, se termine avec succès ou non, la fenêtre restera ouverte et l'invite de commande réapparaîtra pour vous permettre de saisir une autre commande. Si vous souhaitez exécuter votre programme à nouveau, vous pouvez appuyer sur la flèche vers le haut pour rappeler la commande précédente que vous avez entrée et appuyer sur Entrée pour l'exécuter à nouveau, sans avoir à saisir le nom du fichier à chaque fois.

Utilisez IDLE

IDLE est un éditeur de programme simple installé avec Python. Parmi d'autres fonctionnalités, il peut exécuter vos programmes dans une fenêtre. Cliquez avec le bouton droit de la souris sur votre fichier .py et choisissez "Éditer en mode IDLE". Lorsque votre programme apparaît dans l'éditeur, appuyez sur F5 ou choisissez "Module d'exécution" dans le menu "Exécuter". Votre programme s'exécutera dans une fenêtre qui restera ouverte à la fin de votre programme et dans laquelle vous pourrez entrer les commandes Python à exécuter immédiatement.

14
Weeble

La solution de Timmerman fonctionne parfaitement lors de l'exécution du code, mais si vous ne souhaitez pas obtenir les erreurs Undefined name lors de l'utilisation de pyflakes ou d'un linter similaire, vous pouvez utiliser les éléments suivants:

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

Voici un morceau de code que j'ai mis dans mes scripts et que je ne voudrais pas exécuter dans un environnement 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)

Vous pouvez maintenant utiliser real_raw_input. C'est assez cher mais court et lisible. Utiliser une entrée brute prend généralement beaucoup de temps (attendre une entrée), donc ce n’est pas important.

En théorie, vous pouvez même affecter raw_input au lieu de real_raw_input, mais certains modules peuvent vérifier l’existence de raw_input et se comporter en conséquence. Mieux vaut rester prudent.

6
ChewbaccaKL

Ce n’était probablement pas la meilleure solution, mais avant de venir ici, j’ai juste fait ça à la volée pour continuer à travailler sans interruption rapide des études.

def raw_input(x):
  input(x)

Ensuite, lorsque je lance raw_input('Enter your first name: ') sur le script sur lequel je travaillais, il le capture comme le ferait input().

Il y a peut-être une raison pour ne pas faire ceci, que je n'ai pas encore rencontré!

1
Danijel-James W

la fonction raw_input () a été supprimée de Python 3.x. pour prendre l'entrée python2 avait deux fonctions qui étaient input () et raw_input ()

Si vous voulez avoir la même fonctionnalité de 2.x dans 3.x pour prendre le paramètre d'entrée, veuillez suivre ce lien wiki https://en.wikibooks.org/wiki/Python_Programming/Input_and_Output

0
Rahul Anand