import sys
print(sys.platform)
print(2**100)
raw_input()
Sto usando Python 3.1 e non riesco raw_inputa "congelare" il pop-up dos. Il libro che sto leggendo è per Python 2.5 e sto usando Python 3.1
Cosa devo fare per risolvere questo problema?
import sys
print(sys.platform)
print(2**100)
raw_input()
Sto usando Python 3.1 e non riesco raw_inputa "congelare" il pop-up dos. Il libro che sto leggendo è per Python 2.5 e sto usando Python 3.1
Cosa devo fare per risolvere questo problema?
Risposte:
A partire da Python 3, è raw_input()stato rinominato in input().
Da Novità In Python 3.0, sezione builtin seconda voce.
input()e raw_input(). a = input()prenderà l'input dell'utente e lo inserirà nel tipo corretto. Ad esempio: se l'utente digita 5, il valore in aè intero 5. a = raw_input()prenderà l'input dell'utente e lo inserirà come una stringa. Ad esempio: se l'utente digita 5, il valore in aè stringa '5' e non un numero intero. Ho pensato che potesse essere una buona informazione per i neofiti di Python come me.
Funziona con Python 3.xe 2.x:
# Fix Python 2.x.
try: input = raw_input
except NameError: pass
print("Hi " + input("Say something: "))
global inputnella parte superiore della funzione chiamante.
import __builtin__; input = getattr(__builtin__, 'raw_input', input)
__builtin__.
__builtin__viene rinominato builtinsin Python 3. Entrambi sono disponibili come __builtins__in CPython.
getattr(__builtins__, 'raw_input', input)restituisce il valore predefinito quando importato in Python 2.7.2.
Un modo affidabile per affrontare questo è
from six.moves import input
six è un modulo che corregge molti dei 2/3 punti deboli della base di codice comune.
from six.moves import input as raw_input, puoi mantenere lo raw_inputscript ed eseguire usando entrambe le versioni di Python.
Come altri hanno indicato, la raw_inputfunzione è stata rinominata inputin Python 3.0 e sarebbe davvero meglio essere servito da un libro più aggiornato, ma voglio sottolineare che ci sono modi migliori per vedere l'output del tuo script .
Dalla tua descrizione, penso che stai usando Windows, hai salvato un .pyfile e quindi fai doppio clic su di esso per eseguirlo. La finestra del terminale che si apre si chiude non appena termina il programma, quindi non è possibile vedere quale sia stato il risultato del programma. Per risolvere questo, il tuo libro consiglia di aggiungere un'istruzione raw_input/ inputper attendere fino a quando l'utente preme invio. Tuttavia, come hai visto, se qualcosa va storto, come un errore nel tuo programma, quell'istruzione non verrà eseguita e la finestra si chiuderà senza che tu sia in grado di vedere cosa è andato storto. Potrebbe essere più semplice utilizzare un prompt dei comandi o IDLE.
Quando stai guardando la finestra della cartella che contiene il tuo programma Python, tieni premuto MAIUSC e fai clic con il pulsante destro del mouse in un punto qualsiasi dell'area dello sfondo bianco della finestra. Il menu che si apre dovrebbe contenere una voce "Apri finestra di comando qui". (Penso che funzioni su Windows Vista e Windows 7.) Si aprirà una finestra del prompt dei comandi simile a questa:
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Users\Weeble\My Python Program>_
Per eseguire il programma, digitare quanto segue (sostituendo il nome dello script):
python myscript.py
... e premi Invio. (Se viene visualizzato l'errore che "python" non è un comando riconosciuto, consultare http://showmedo.com/videotutorials/video?name=960000&fromSeriesID=96 ) Al termine dell'esecuzione del programma, indipendentemente dal fatto che si completi o meno, la finestra rimarrà aperto e verrà visualizzato di nuovo il prompt dei comandi per digitare un altro comando. Se si desidera eseguire nuovamente il programma, è possibile premere la freccia su per richiamare il comando precedente immesso e premere Invio per eseguirlo nuovamente, anziché dover digitare il nome del file ogni volta.
IDLE è un semplice editor di programmi che viene installato con Python. Tra le altre funzionalità, puoi eseguire i tuoi programmi in una finestra. Fai clic con il pulsante destro del mouse sul .pyfile e scegli "Modifica in IDLE". Quando il tuo programma appare nell'editor, premi F5 o scegli "Esegui modulo" dal menu "Esegui". Il programma verrà eseguito in una finestra che rimane aperta al termine del programma e in cui è possibile immettere i comandi Python per l'esecuzione immediata.
pythonw -m idlelib.idle
La soluzione di Timmerman funziona benissimo quando si esegue il codice, ma se non si desidera ottenere Undefined nameerrori quando si utilizzano pyflakes o una linter simile, è possibile utilizzare invece quanto segue:
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).
flake8o pyflakesin modo da non occupare tutto la giornata con avvisi senza senso.
Ecco un pezzo di codice che ho inserito nei miei script che non voglio eseguire in un ambiente 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)
Ora puoi usare real_raw_input. È piuttosto costoso ma breve e leggibile. L'uso di input non elaborati di solito è costoso (in attesa di input), quindi non è importante.
In teoria, puoi anche assegnare raw_input invece di real_raw_input ma potrebbero esserci dei moduli che controllano l'esistenza di raw_input e si comportano di conseguenza. È meglio stare al sicuro.
Probabilmente non è la soluzione migliore, ma prima di venire qui ho fatto questo al volo per continuare a lavorare senza una breve pausa dallo studio.
def raw_input(x):
input(x)
Quindi, quando eseguo raw_input('Enter your first name: ')lo script su cui stavo lavorando, lo cattura come input()farebbe.
Potrebbe esserci un motivo per non farlo, che non ho ancora incontrato!
raw_input = input?