Hoe gebruik ik raw_input in Python 3

Ik gebruik Python 3.1 en kan de raw_inputniet krijgen om de dos-pop-up te “bevriezen”. Het boek dat ik aan het lezen ben is voor Python 2.5 en ik gebruik Python 3.1

Wat moet ik doen om dit op te lossen?


Antwoord 1, autoriteit 100%

Vanaf Python 3 werd raw_input()hernoemd naar input().

Van Wat is er nieuw in Python 3.0, sectie Builtinstweede item.


Antwoord 2, autoriteit 11%

Dit werkt in Python 3.x en 2.x:

# Fix Python 2.x.
try: input = raw_input
except NameError: pass
print("Hi " + input("Say something: "))

Antwoord 3, autoriteit 4%

Een betrouwbare manier om dit aan te pakken is

from six.moves import input

sixis een module die patcht over veel van de 2/3 gemeenschappelijke pijnpunten van de codebasis.


Antwoord 4

Zoals anderen hebben aangegeven, is de functie raw_inputhernoemd naar inputin Python 3.0, en je zou echt beter gediend zijn met een meer up-to-date boek , maar ik wil je erop wijzen dat er betere manieren zijn om de uitvoer van je script te zien.

Vanaf uw beschrijving, ik denk dat u Windows gebruikt, u hebt een .py-bestand opgeslagen en vervolgens dubbelklikt u erop om het uit te voeren. Het terminalvenster dat verschijnt, sluit af zodra uw programma eindigt, dus u kunt niet zien wat het resultaat van uw programma was. Om dit op te lossen, raadt uw boek aan om een ​​raw_input/ inputVerklaring in te voegen om te wachten totdat de gebruiker ingaan. Zoals u echter hebt gezien, als er iets misgaat, zoals een fout in uw programma, wordt die verklaring niet uitgevoerd en wordt het venster gesloten zonder dat u kunt zien wat er mis ging. Misschien vindt u het gemakkelijker om een ​​opdrachtprompt of inactief te gebruiken.

Gebruik een opdrachtprompt

Wanneer u naar het mapvenster bekijkt, houdt u uw Python-programma vast, houd de shift ingedrukt en klikt u met de rechtermuisknop ergens in het witte achtergrondgebied van het venster. Het menu dat verschijnt, moet hier een item “open opdrachtvenster bevatten”. (Ik denk dat dit werkt op Windows Vista en Windows 7.) Hiermee wordt een opdracht-promptvenster geopend dat er zoiets uitziet:

   Microsoft Windows [Version 6.1.7601]
    Copyright (c) 2009 Microsoft Corporation.  All rights reserved.
    C:\Users\Weeble\My Python Program>_

Als u uw programma wilt uitvoeren, typt u het volgende (vervang uw scriptnaam):

   python myscript.py

… en druk op ENTER. (Als u een foutmelding krijgt dat “Python” geen erkende commando is, zie http://showmedo.com / Videotutorials / VIDEO? Naam = 960000 & amp; Fromseriesid = 96 ) Wanneer uw programma is voltooid, of deze succesvol is voltooid of niet, blijft het venster open en de opdrachtprompt verschijnt opnieuw om een ​​andere opdracht te typen. Als u opnieuw uw programma wilt uitvoeren, kunt u op de pijl omhoog drukken om het vorige opdracht te herinneren dat u hebt ingevoerd en drukt u op ENTER om het opnieuw uit te voeren, in plaats van de bestandsnaam elke keer te gebruiken.

Gebruik inactieve

Idle is een eenvoudige programma-editor die is geïnstalleerd met Python. Onder andere kan het uw programma’s in een venster uitvoeren. Klik met de rechtermuisknop op uw .pybestand en kies “Bewerken in stationair”. Wanneer uw programma in de editor verschijnt, drukt u op F5 of kiest u “Module uitvoeren” in het menu “Uitvoeren”. Uw programma wordt uitgevoerd in een venster dat wordt geopend nadat uw programma eindigt, en waarin u Python-opdrachten kunt invoeren om onmiddellijk uit te voeren.


Antwoord 5

De oplossing van Timmerman werkt geweldig bij het uitvoeren van de code, maar als u niet wilt ontvangen Undefined namefouten bij gebruik van pyflakes of een vergelijkbare voerter, kunt u het volgende gebruiken:

try:
    import __builtin__
    input = getattr(__builtin__, 'raw_input')
except (ImportError, AttributeError):
    pass

Antwoord 6

Hier is een stuk code dat ik in mijn scripts heb gezet die ik niet in PY2 / 3-Agnostic-omgeving zal uitvoeren:

# Thank you, python2-3 team, for making such a fantastic mess with
# input/raw_input :-)
real_raw_input = vars(__builtins__).get('raw_input',input)

Nu kunt u real_raw_input gebruiken. Het is vrij duur, maar kort en leesbaar. Het gebruik van de onbewerkte invoer is meestal tijd duur (wachten op invoer), dus het is niet belangrijk.

In theorie kunt u zelfs raw_input toewijzen in plaats van real_raw_input, maar er kunnen modules zijn die het bestaan ​​van raw_input controleren en dienovereenkomstig gedragen. Het is beter aan de veilige kant.


Antwoord 7

Waarschijnlijk niet de beste oplossing, maar voordat ik hier kwam, heb ik dit gewoon op de vlucht gemaakt om te blijven werken zonder een snelle pauze te hebben van studie.

def raw_input(x):
  input(x)

Dan wanneer ik raw_input('Enter your first name: ')Op het script waar ik aan werkte, het legt het vast, zoals input()zou.

Er is misschien een reden om dit niet te doen, dat ik nog niet tegenkomt!


Antwoord 8

Wat dacht je van de volgende? Mocht u toestaan ​​dat u raw_input of invoer in zowel Python2 als Python3 gebruikt met de semantiek van Python2’s Raw_Input (AKA de semantiek van Python3’s Input)

# raw_input isn't defined in Python3.x, whereas input wasn't behaving like raw_input in Python 2.x
# this should make both input and raw_input work in Python 2.x/3.x like the raw_input from Python 2.x 
try: input = raw_input
except NameError: raw_input = input

Antwoord 9

Nog een manier die u het zo kunt doen, door een nieuwe functie te maken.

import platform
def str_input(str=''):
    py_version = platform.python_version() # fetch the python version currently in use
    if int(py_version[0]) == 2:
       return raw_input(str) # input string in python2
    if int(py_version[0]) == 3:
       return input(str) # input string in python3

hoe te gebruiken:

str_input("Your Name: ")

Ik gebruik dit wanneer ik scripts en invoer wil maken die kunnen worden uitgevoerd in python2 en python3

Other episodes