Qual è la differenza tra raw_input()
e input()
in Python 3?
input
per raw_input
e ignorare gli errori di nome.
Qual è la differenza tra raw_input()
e input()
in Python 3?
input
per raw_input
e ignorare gli errori di nome.
Risposte:
La differenza è che raw_input()
non esiste in Python 3.x, mentre input()
esiste. In realtà, il vecchio raw_input()
è stato rinominato input()
e il vecchio non input()
c'è più, ma può essere facilmente simulato usando eval(input())
. (Ricorda che eval()
è un male. Cerca di usare modi più sicuri per analizzare il tuo input, se possibile.)
raw_input
...?" - "La differenza è che non c'è raw_input
." ... Una differenza drastica, direi!
eval
(e exec
) dovrebbero essere generalmente evitati perché possono rappresentare un rischio per la sicurezza. Per i dettagli, vedi Eval è davvero pericoloso dal veterano SO Ned Batchelder. E ovviamente questo consiglio vale anche per il vecchio Python 2 input
.
eval()
e exec()
, ma devi prima capire perché non dovresti usare eval()
prima di decidere di usarlo.
In Python 2 , raw_input()
restituisce una stringa e input()
tenta di eseguire l'input come espressione Python.
Dato che ottenere una stringa era quasi sempre quello che volevi, Python 3 lo fa input()
. Come dice Sven, se mai vuoi il vecchio comportamento, eval(input())
funziona.
raw_input()
.
raw_input()
prende esattamente ciò che l'utente ha digitato e lo restituisce come una stringa.
input()
prima prende il raw_input()
e poi esegue anche eval()
su di esso.
La differenza principale è che si input()
aspetta un'istruzione pitone sintatticamente corretta dove raw_input()
no.
raw_input()
è stato rinominato in input()
modo che ora input()
restituisca la stringa esatta.input()
stato rimosso.Se vuoi usare il vecchio input()
, nel senso che devi valutare un input dell'utente come un'istruzione python, devi farlo manualmente usando eval(input())
.
In Python 3, raw_input()
non esiste che è già stato menzionato da Sven.
In Python 2, la input()
funzione valuta il tuo input.
Esempio:
name = input("what is your name ?")
what is your name ?harsha
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
name = input("what is your name ?")
File "<string>", line 1, in <module>
NameError: name 'harsha' is not defined
Nell'esempio sopra, Python 2.x sta provando a valutare harsha come una variabile piuttosto che una stringa. Per evitarlo, possiamo usare virgolette doppie attorno al nostro input come "harsha":
>>> name = input("what is your name?")
what is your name?"harsha"
>>> print(name)
harsha
raw_input ()
La funzione raw_input () `non valuta, leggerà semplicemente qualunque cosa tu inserisca.
Esempio:
name = raw_input("what is your name ?")
what is your name ?harsha
>>> name
'harsha'
Esempio:
name = eval(raw_input("what is your name?"))
what is your name?harsha
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
name = eval(raw_input("what is your name?"))
File "<string>", line 1, in <module>
NameError: name 'harsha' is not defined
Nell'esempio sopra, stavo solo cercando di valutare l'input dell'utente con la eval
funzione.
Vorrei aggiungere un po 'più di dettaglio alla spiegazione fornita da tutti per gli utenti di Python 2 . raw_input()
, che ormai sai che valuta tutti i dati immessi dall'utente come stringa. Ciò significa che python non prova nemmeno a comprendere nuovamente i dati inseriti. Tutto ciò che verrà considerato è che i dati immessi saranno stringa, indipendentemente dal fatto che si tratti di una stringa o di un int reale o altro.
Mentre input()
sugli altri tentativi mano per comprendere i dati inseriti dall'utente. Quindi l'input like helloworld
mostrerebbe anche l'errore come ' helloworld is undefined
'.
In conclusione, per python 2 , anche per inserire una stringa è necessario inserirla come ' helloworld
' che è la struttura comune usata in Python per usare le stringhe.
Se vuoi assicurarti che il tuo codice sia in esecuzione con python2 e python3, usa la funzione input () nel tuo script e aggiungi questo per iniziare il tuo script:
from sys import version_info
if version_info.major == 3:
pass
elif version_info.major == 2:
try:
input = raw_input
except NameError:
pass
else:
print ("Unknown python version - input function not safe")