Qual é a diferença entre raw_input()
e input()
no Python 3?
input
a raw_input
e ignorar erros de nome.
Qual é a diferença entre raw_input()
e input()
no Python 3?
input
a raw_input
e ignorar erros de nome.
Respostas:
A diferença é que raw_input()
não existe no Python 3.x, enquanto existe input()
. Na verdade, o antigo raw_input()
foi renomeado para input()
e o antigo input()
se foi, mas pode ser facilmente simulado usando eval(input())
. (Lembre-se de que isso eval()
é mau. Tente usar maneiras mais seguras de analisar sua opinião, se possível.)
raw_input
...?" - "A diferença é que não há raw_input
." ... Uma diferença drástica, eu diria!
eval
(e exec
) geralmente deve ser evitado, porque eles podem ser um risco à segurança. Para detalhes, consulte Eval é realmente perigoso pelo veterano do SO Ned Batchelder. E é claro que esse conselho também se aplica ao antigo Python 2 input
.
eval()
e exec()
, mas primeiro você precisa entender por que não usar eval()
antes de decidir usá-lo.
No Python 2 , raw_input()
retorna uma string e input()
tenta executar a entrada como uma expressão Python.
Como obter uma string quase sempre era o que você queria, o Python 3 faz isso input()
. Como diz Sven, se você quiser o comportamento antigo, eval(input())
funciona.
raw_input()
.
raw_input()
pega exatamente o que o usuário digitou e passa de volta como uma string.
input()
primeiro pega o raw_input()
e depois executa um eval()
nele também.
A principal diferença é que input()
espera uma declaração python sintaticamente correta, onde raw_input()
não.
raw_input()
foi renomeado para input()
agora input()
retorna a string exata.input()
foi removido.Se você deseja usar o antigo input()
, o que significa que você precisa avaliar uma entrada do usuário como uma instrução python, é necessário fazê-lo manualmente usando eval(input())
.
No Python 3, raw_input()
não existe o que já foi mencionado por Sven.
No Python 2, a input()
função avalia sua entrada.
Exemplo:
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
No exemplo acima, o Python 2.x está tentando avaliar harsha como uma variável e não como uma string. Para evitar isso, podemos usar aspas duplas em torno de nossa entrada como "harsha":
>>> name = input("what is your name?")
what is your name?"harsha"
>>> print(name)
harsha
raw_input ()
A função raw_input () `não avalia, apenas lê o que você digita.
Exemplo:
name = raw_input("what is your name ?")
what is your name ?harsha
>>> name
'harsha'
Exemplo:
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
No exemplo acima, eu estava apenas tentando avaliar a entrada do usuário com a eval
função
Gostaria de adicionar um pouco mais de detalhes à explicação fornecida por todos para os usuários do python 2 . raw_input()
, que, a essa altura, você sabe que avalia os dados inseridos pelo usuário como uma sequência. Isso significa que o python nem tenta entender os dados inseridos novamente. Tudo o que consideraremos é que os dados inseridos serão string, independentemente de ser uma string ou int real ou algo assim.
Enquanto, input()
por outro lado, tenta entender os dados inseridos pelo usuário. Assim, a entrada like helloworld
mostraria o erro como ' helloworld is undefined
'.
Concluindo, para o python 2 , para inserir uma string também, é necessário inseri-la como ' helloworld
', que é a estrutura comum usada no python para usar strings.
Se você deseja garantir que seu código esteja sendo executado com python2 e python3, use a função input () no seu script e adicione-a ao início do seu 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")