TL; DR
inputfunção no Python 2.7, avalia o que você digitar, como uma expressão Python. Se você simplesmente quiser ler strings, use a raw_inputfunção no Python 2.7, que não avaliará as strings de leitura.
Se você estiver usando o Python 3.x, raw_inputfoi 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.stdine a retorna com a nova linha à direita retirada. Aumenta EOFErrorse 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 é inpute 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'
inputaceita uma string do usuário e avalia a string no contexto atual do Python. Quando digito dudecomo entrada, ele descobre que dudeestá vinculado ao valor thefourtheyee, portanto, o resultado da avaliação se torna thefourtheyee 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 inputfunçã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_inputfunçã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 intfunçã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.
inputme comportar dessa maneira, mas apenas no 2.7. O que diz quando você executa apython --versionpartir de um prompt de comando? Como alternativa, e se você escreverimport sys; print(sys.version)no início do seu script?