import sys
print(sys.platform)
print(2**100)
raw_input()
J'utilise Python 3.1 et je n'arrive pas raw_input
à "geler" le pop-up dos. 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?
import sys
print(sys.platform)
print(2**100)
raw_input()
J'utilise Python 3.1 et je n'arrive pas raw_input
à "geler" le pop-up dos. 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?
Réponses:
À partir de Python 3, a raw_input()
été renommé input()
.
À partir de Quoi de neuf dans Python 3.0, deuxième élément de la section Builtins .
input()
et raw_input()
. a = input()
prendra l'entrée utilisateur et la mettra dans le bon type. Par exemple: si l'utilisateur tape 5, la valeur de a
est entier 5. a = raw_input()
prendra l'entrée utilisateur et la mettra sous forme de chaîne. Par exemple: si l'utilisateur tape 5, la valeur dans a
est la chaîne '5' et non un entier. Je pensais que cela pourrait être une bonne info pour les débutants en python comme moi.
Cela fonctionne en Python 3.x et 2.x:
# Fix Python 2.x.
try: input = raw_input
except NameError: pass
print("Hi " + input("Say something: "))
global input
en haut de la fonction appelante.
import __builtin__; input = getattr(__builtin__, 'raw_input', input)
__builtin__
.
__builtin__
est renommé builtins
en Python 3. Les deux sont disponibles comme __builtins__
dans CPython.
getattr(__builtins__, 'raw_input', input)
renvoie la valeur par défaut lors de l'importation dans Python 2.7.2.
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 des points communs de base de code.
from six.moves import input as raw_input
, vous pouvez conserver raw_input
votre script et exécuter en utilisant les deux versions de Python.
Comme d'autres l'ont indiqué, la raw_input
fonction a été renommée input
en Python 3.0, et vous seriez vraiment mieux servi par un livre plus à jour, 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 .py
fichier et vous double-cliquez dessus pour l'exécuter. La fenêtre du terminal qui apparaît 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 d'ajouter une instruction raw_input
/ input
pour attendre que l'utilisateur appuie sur Entrée. Cependant, comme vous l'avez vu, si quelque chose ne va pas, comme une erreur dans votre programme, cette instruction ne sera pas exécutée et la fenêtre se fermera sans que vous puissiez voir ce qui s'est mal passé. Vous trouverez peut-être plus facile d'utiliser une invite de commande ou IDLE.
Lorsque vous regardez la fenêtre de dossier qui contient votre programme Python, maintenez la touche Maj enfoncée et cliquez avec le bouton droit n'importe où dans la zone d'arrière-plan blanc de la fenêtre. Le menu qui apparaît doit 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 le nom de votre script):
python myscript.py
... et appuyez sur entrée. (Si vous obtenez une erreur indiquant que "python" n'est pas une commande reconnue, consultez http://showmedo.com/videotutorials/video?name=960000&fromSeriesID=96 ) Lorsque votre programme se termine, qu'il se termine avec succès ou non, la fenêtre restera ouvert et l'invite de commande apparaîtra à nouveau pour vous permettre de taper une autre commande. Si vous souhaitez réexécuter votre programme, 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, plutôt que d'avoir à taper le nom du fichier à chaque fois.
IDLE est un éditeur de programme simple qui est installé avec Python. Entre autres fonctionnalités, il peut exécuter vos programmes dans une fenêtre. Faites un clic droit sur votre .py
fichier et choisissez "Modifier dans IDLE". Lorsque votre programme apparaît dans l'éditeur, appuyez sur F5 ou choisissez "Exécuter le module" dans le menu "Exécuter". Votre programme s'exécutera dans une fenêtre qui reste ouverte après la fin de votre programme et dans laquelle vous pouvez entrer des commandes Python à exécuter immédiatement.
pythonw -m idlelib.idle
La solution de Timmerman fonctionne très bien lors de l'exécution du code, mais si vous ne souhaitez pas obtenir d' Undefined name
erreurs lors de l'utilisation de pyflakes ou d'un linter similaire, vous pouvez utiliser les éléments suivants à la place:
try:
import __builtin__
input = getattr(__builtin__, 'raw_input')
except (ImportError, AttributeError):
pass
Redefining built-in 'input' (redefined-builtin)
, Unable to import '__builtin__' (import-error)
, Invalid constant name "input" (invalid-name)
.
flake8
ou pyflakes
afin de ne pas prendre toute la journée avec des avertissements vides de sens.
Voici un morceau de code que j'ai mis dans mes scripts que je ne veux pas exécuter dans un environnement py2 / 3-agnostique:
# 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. L'utilisation de données brutes coûte généralement beaucoup de temps (en attente de données), ce n'est donc pas important.
En théorie, vous pouvez même assigner raw_input au lieu de real_raw_input mais il peut y avoir des modules qui vérifient l'existence de raw_input et se comportent en conséquence. Il vaut mieux rester prudent.
Ce n'est probablement pas la meilleure solution, mais avant de venir ici, je l'ai fait à la volée pour continuer à travailler sans avoir une pause rapide dans mes études.
def raw_input(x):
input(x)
Ensuite, lorsque je lance raw_input('Enter your first name: ')
le script sur lequel je travaillais, il le capture comme il le input()
ferait.
Il y a peut-être une raison pour ne pas le faire, que je n'ai pas encore rencontré!
raw_input = input
?