import sys
print(sys.platform)
print(2**100)
raw_input()
Estou usando o Python 3.1 e não consigo raw_input
"congelar" o pop-up dos. O livro que estou lendo é para Python 2.5 e estou usando Python 3.1
O que devo fazer para corrigir isso?
import sys
print(sys.platform)
print(2**100)
raw_input()
Estou usando o Python 3.1 e não consigo raw_input
"congelar" o pop-up dos. O livro que estou lendo é para Python 2.5 e estou usando Python 3.1
O que devo fazer para corrigir isso?
Respostas:
A partir do Python 3, raw_input()
foi renomeado para input()
.
Do que há de novo no Python 3.0, segundo item da seção Builtins .
input()
e raw_input()
. a = input()
pegará a entrada do usuário e a colocará no tipo correto. Por exemplo: se o usuário digitar 5, o valor em a
é o número 5. a = raw_input()
receberá a entrada do usuário e a colocará como uma string. Por exemplo: se o usuário digitar 5, o valor em a
é a string '5' e não um número inteiro. Pensei que poderia ser uma boa informação para iniciantes em python como eu.
Isso funciona no Python 3.xe 2.x:
# Fix Python 2.x.
try: input = raw_input
except NameError: pass
print("Hi " + input("Say something: "))
global input
na parte superior da função de chamada.
import __builtin__; input = getattr(__builtin__, 'raw_input', input)
__builtin__
.
__builtin__
é renomeado para builtins
no Python 3. Ambos estão disponíveis como __builtins__
no CPython.
getattr(__builtins__, 'raw_input', input)
retorna o padrão quando importado no Python 2.7.2.
Uma maneira confiável de resolver isso é
from six.moves import input
six é um módulo que corrige muitos dos 2/3 pontos problemáticos básicos do código.
from six.moves import input as raw_input
, você pode manter raw_input
seu script e executar usando as duas versões do Python.
Como outros indicaram, a raw_input
função foi renomeada input
no Python 3.0, e você realmente seria melhor atendido por um livro mais atualizado, mas quero ressaltar que existem maneiras melhores de ver a saída do seu script .
Na sua descrição, acho que você está usando o Windows, salvou um .py
arquivo e clicou duas vezes nele para executá-lo. A janela do terminal exibida fecha assim que o programa termina, para que você não possa ver qual foi o resultado do programa. Para resolver isso, seu livro recomenda adicionar uma instrução raw_input
/ input
para aguardar até que o usuário pressione Enter. No entanto, como você viu, se algo der errado, como um erro no seu programa, essa instrução não será executada e a janela será fechada sem que você possa ver o que deu errado. Você pode achar mais fácil usar um prompt de comando ou IDLE.
Quando você estiver olhando para a janela da pasta que contém o seu programa Python, mantenha pressionada a tecla Shift e clique com o botão direito do mouse em qualquer lugar na área branca da janela. O menu exibido deve conter a entrada "Abrir janela de comando aqui". (Eu acho que isso funciona no Windows Vista e Windows 7.) Isso abrirá uma janela de prompt de comando que se parece com isso:
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Users\Weeble\My Python Program>_
Para executar seu programa, digite o seguinte (substituindo o nome do script):
python myscript.py
... e pressione enter. (Se você receber um erro que "python" não é um comando reconhecido, consulte http://showmedo.com/videotutorials/video?name=960000&fromSeriesID=96 ) Quando o programa termina a execução, seja com êxito ou não, a janela permanecerá aberto e o prompt de comando aparecerá novamente para você digitar outro comando. Se você deseja executar o programa novamente, pressione a seta para cima para recuperar o comando anterior digitado e pressione enter para executá-lo novamente, em vez de digitar o nome do arquivo todas as vezes.
O IDLE é um editor de programa simples que é instalado com o Python. Entre outros recursos, ele pode executar seus programas em uma janela. Clique com o botão direito do mouse no seu .py
arquivo e escolha "Editar no IDLE". Quando o seu programa aparecer no editor, pressione F5 ou escolha "Executar módulo" no menu "Executar". Seu programa será executado em uma janela que permanece aberta após o término do programa e na qual você pode inserir comandos Python para serem executados imediatamente.
pythonw -m idlelib.idle
A solução da Timmerman funciona muito bem ao executar o código, mas se você não deseja obter Undefined name
erros ao usar pyflakes ou um linter similar, pode usar o seguinte:
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)
.
flake8
ou pyflakes
não, o dia todo, com avisos sem sentido.
Aqui está um pedaço de código que eu coloquei nos meus scripts que não quero executar no ambiente py2 / 3-agnóstico:
# Thank you, python2-3 team, for making such a fantastic mess with
# input/raw_input :-)
real_raw_input = vars(__builtins__).get('raw_input',input)
Agora você pode usar real_raw_input. É muito caro, mas curto e legível. O uso de entrada bruta geralmente custa muito tempo (aguardando entrada), portanto não é importante.
Em teoria, você pode até atribuir raw_input em vez de real_raw_input, mas pode haver módulos que verifiquem a existência de raw_input e se comportem de acordo. É melhor ficar do lado seguro.
Provavelmente não é a melhor solução, mas antes de vir para cá, fiz isso rapidamente para continuar trabalhando sem ter uma rápida pausa nos estudos.
def raw_input(x):
input(x)
Então, quando executo raw_input('Enter your first name: ')
o script em que estava trabalhando, ele o captura como o input()
faria.
Pode haver uma razão para não fazer isso, que eu ainda não encontrei!
raw_input = input
?