Wie kann ich raw_input in Python 3 verwenden?

import sys
print(sys.platform)
print(2**100)
raw_input()

Ich benutze Python 3.1 und kann raw_input nicht dazu bringen, das Dos-Pop-up einzufrieren. Das Buch, das ich lese, ist für Python 2.5 und ich benutze Python 3.1.

Was sollte ich tun, um das Problem zu lösen?

Kommentare zu der Frage (4)
Lösung

Beginnend mit Python 3 wurde raw_input() in input() umbenannt.

Aus What's New In Python 3.0.

Kommentare (6)

Dies funktioniert in Python 3.x und 2.x:

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

Ein zuverlässiger Weg, dies anzugehen, ist

from six.moves import input

[six][1] ist ein Modul, das viele der 2/3 der gemeinsamen Codebasis-Schmerzpunkte patchen kann.

[1]: https://six.readthedocs.io/

Kommentare (1)

Wie andere schon angedeutet haben, wurde die Funktion raw_input in Python 3.0 in input umbenannt, und Sie wären mit einem aktuelleren Buch wirklich besser bedient, aber ich möchte darauf hinweisen, dass es bessere Möglichkeiten gibt, die Ausgabe Ihres Skripts zu sehen.

Aus Ihrer Beschreibung schließe ich, dass Sie Windows benutzen, eine .py-Datei gespeichert haben und sie dann mit einem Doppelklick ausführen. Das sich öffnende Terminalfenster schließt sich, sobald Ihr Programm beendet ist, so dass Sie nicht sehen können, was das Ergebnis Ihres Programms war. Um dieses Problem zu lösen, empfiehlt Ihr Buch, eine raw_input / input-Anweisung hinzuzufügen, um zu warten, bis der Benutzer die Eingabetaste drückt. Wie Sie jedoch gesehen haben, wird diese Anweisung nicht ausgeführt, wenn etwas schief geht, z. B. ein Fehler in Ihrem Programm, und das Fenster wird geschlossen, ohne dass Sie sehen können, was schief gegangen ist. Vielleicht ist es einfacher, eine Eingabeaufforderung oder IDLE zu verwenden.

Verwenden Sie eine Eingabeaufforderung

Wenn Sie das Ordnerfenster sehen, das Ihr Python-Programm enthält, halten Sie die Umschalttaste gedrückt und klicken Sie mit der rechten Maustaste irgendwo in den weißen Hintergrund des Fensters. Das sich öffnende Menü sollte den Eintrag "Befehlsfenster hier öffnen" enthalten (ich glaube, das funktioniert unter Windows Vista und Windows 7.) Dadurch öffnet sich ein Eingabeaufforderungsfenster, das etwa so aussieht:

    Microsoft Windows [Version 6.1.7601]
    Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

    C:\Users\Weeble\My Python Program>_

Um Ihr Programm auszuführen, geben Sie Folgendes ein (ersetzen Sie dabei den Namen Ihres Skripts):

    python myscript.py

...und drücken Sie die Eingabetaste. (Wenn Sie die Fehlermeldung erhalten, dass "python" kein anerkannter Befehl ist, siehe http://showmedo.com/videotutorials/video?name=960000&fromSeriesID=96 ) Wenn Ihr Programm erfolgreich oder nicht erfolgreich ausgeführt wurde, bleibt das Fenster geöffnet und die Eingabeaufforderung wird erneut angezeigt, damit Sie einen weiteren Befehl eingeben können. Wenn Sie Ihr Programm erneut ausführen möchten, können Sie den Pfeil nach oben drücken, um den zuvor eingegebenen Befehl aufzurufen, und die Eingabetaste drücken, um ihn erneut auszuführen, anstatt jedes Mal den Dateinamen eingeben zu müssen.

IDLE verwenden

IDLE ist ein einfacher Programmeditor, der mit Python installiert wird. Neben anderen Funktionen kann er Ihre Programme in einem Fenster ausführen. Klicken Sie mit der rechten Maustaste auf Ihre .py-Datei und wählen Sie "In IDLE bearbeiten". Wenn Ihr Programm im Editor erscheint, drücken Sie F5 oder wählen Sie "Modul ausführen" aus dem Menü "Ausführen". Ihr Programm wird in einem Fenster ausgeführt, das nach Beendigung Ihres Programms geöffnet bleibt und in dem Sie Python-Befehle eingeben können, um es sofort auszuführen.

Kommentare (5)

Die Lösung von Timmerman's funktioniert großartig, wenn der Code ausgeführt wird, aber wenn Sie nicht't wollen, dass Sie Undefined Name-Fehler erhalten, wenn Sie Pyflakes oder einen ähnlichen Linter verwenden, könnten Sie stattdessen das Folgende verwenden:

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

Hier's ein Stück Code, das ich in meine Skripte gepackt habe und das ich in einer py2/3-diagnostischen Umgebung ausführen möchte't:

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

Jetzt können Sie real_raw_input verwenden. Es ist ziemlich teuer, aber kurz und lesbar. Die Verwendung von Raw-Input ist normalerweise zeitaufwendig (Warten auf die Eingabe), daher ist es's nicht wichtig.

Theoretisch können Sie sogar raw_input anstelle von real_raw_input verwenden, aber es könnte Module geben, die die Existenz von raw_input prüfen und sich entsprechend verhalten. It's besser auf der sicheren Seite bleiben.

Kommentare (1)

Wahrscheinlich nicht die beste Lösung, aber bevor ich hierher kam, habe ich das nur spontan gemacht, um weiterarbeiten zu können, ohne eine kurze Pause vom Studium einzulegen.

def raw_input(x):
  input(x)

Wenn ich dann raw_input('Geben Sie Ihren Vornamen ein: ') auf dem Skript ausführe, an dem ich gearbeitet habe, wird es erfasst, wie es auch input() tun würde.

Es mag einen Grund dafür geben, dies nicht zu tun, den ich noch nicht kennengelernt habe'noch nicht!

Kommentare (1)