TL; DR
input
função no Python 2.7, avalia o que você digitar, como uma expressão Python. Se você simplesmente quiser ler strings, use a raw_input
função no Python 2.7, que não avaliará as strings de leitura.
Se você estiver usando o Python 3.x, raw_input
foi renomeado para input
. Citando as notas de versão do Python 3.0 ,
raw_input()
foi renomeado para input()
. Ou seja, a nova input()
função lê uma linha sys.stdin
e a retorna com a nova linha à direita retirada. Aumenta EOFError
se a entrada for finalizada prematuramente. Para obter o comportamento antigo de input()
, useeval(input())
No Python 2.7 , existem duas funções que podem ser usadas para aceitar entradas do usuário. Um é input
e o outro é raw_input
. Você pode pensar na relação entre eles da seguinte maneira
input = eval(raw_input)
Considere o seguinte trecho de código para entender melhor isso
>>> dude = "thefourtheye"
>>> input_variable = input("Enter your name: ")
Enter your name: dude
>>> input_variable
'thefourtheye'
input
aceita uma string do usuário e avalia a string no contexto atual do Python. Quando digito dude
como entrada, ele descobre que dude
está vinculado ao valor thefourtheye
e, portanto, o resultado da avaliação se torna thefourtheye
e ao qual é atribuído input_variable
.
Se eu inserir outra coisa que não existe no contexto atual do python, ela falhará NameError
.
>>> input("Enter your name: ")
Enter your name: dummy
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "<string>", line 1, in <module>
NameError: name 'dummy' is not defined
Considerações de segurança com o Python 2.7 input
:
Como qualquer tipo de usuário é avaliado, ele também impõe problemas de segurança. Por exemplo, se você já carregouos
módulo em seu programa e import os
, em seguida, o usuário digita
os.remove("/etc/hosts")
isso será avaliado como uma expressão de chamada de função por python e será executado. Se você estiver executando o Python com privilégios elevados,/etc/hosts
arquivo será excluído. Veja, quão perigoso poderia ser?
Para demonstrar isso, vamos tentar executar a input
função novamente.
>>> dude = "thefourtheye"
>>> input("Enter your name: ")
Enter your name: input("Enter your name again: ")
Enter your name again: dude
Agora quando input("Enter your name: ")
é executado, aguarda a entrada do usuário e a entrada do usuário é uma chamada de função Python válida e, portanto, também é chamada. É por isso que estamos vendoEnter your name again:
aviso novamente.
Então, você está melhor com a raw_input
função, assim
input_variable = raw_input("Enter your name: ")
Se você precisar converter o resultado em outro tipo, poderá usar as funções apropriadas para converter a sequência retornada por raw_input
. Por exemplo, para ler entradas como números inteiros, use a int
função, como mostrado em nesta resposta .
No python 3.x , existe apenas uma função para obter entradas do usuário e isso é chamado input
, o que é equivalente ao Python 2.7 raw_input
.
input
me comportar dessa maneira, mas apenas no 2.7. O que diz quando você executa apython --version
partir de um prompt de comando? Como alternativa, e se você escreverimport sys; print(sys.version)
no início do seu script?