import sys
print(sys.platform)
print(2**100)
raw_input()
Ich verwende Python 3.1 und kann raw_input
das Dos-Popup nicht "einfrieren". Das Buch, das ich lese, ist für Python 2.5 und ich verwende Python 3.1
Was soll ich tun, um das zu beheben?
import sys
print(sys.platform)
print(2**100)
raw_input()
Ich verwende Python 3.1 und kann raw_input
das Dos-Popup nicht "einfrieren". Das Buch, das ich lese, ist für Python 2.5 und ich verwende Python 3.1
Was soll ich tun, um das zu beheben?
Antworten:
Beginnend mit Python 3 raw_input()
wurde in umbenannt input()
.
Aus den Neuerungen in Python 3.0, Abschnitt Builtins, zweites Element.
input()
und festgestellt raw_input()
. a = input()
nimmt die Benutzereingabe und fügt sie in den richtigen Typ ein. Beispiel: Wenn der Benutzer 5 eingibt, ist der Wert in a
eine Ganzzahl 5. a = raw_input()
Die Benutzereingabe wird als Zeichenfolge eingefügt. Beispiel: Wenn der Benutzer 5 eingibt, ist der Wert in a
die Zeichenfolge '5' und keine Ganzzahl. Ich dachte, es könnte eine gute Information für Neulinge in Python wie mich sein.
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: "))
global input
am oberen Rand der aufrufenden Funktion behoben.
import __builtin__; input = getattr(__builtin__, 'raw_input', input)
__builtin__
.
__builtin__
wird builtins
in Python 3 umbenannt . Beide sind wie __builtins__
in CPython verfügbar .
getattr(__builtins__, 'raw_input', input)
Gibt beim Import in Python 2.7.2 die Standardeinstellung zurück.
Ein zuverlässiger Weg, dies zu beheben, ist
from six.moves import input
six ist ein Modul, das viele der 2/3 allgemeinen Codebasis-Schwachstellen korrigiert.
from six.moves import input as raw_input
, können Sie raw_input
in Ihrem Skript bleiben und beide Python-Versionen verwenden.
Wie andere angegeben haben, wurde die raw_input
Funktion input
in Python 3.0 umbenannt, und Sie würden wirklich besser von einem aktuelleren Buch bedient werden, aber ich möchte darauf hinweisen, dass es bessere Möglichkeiten gibt, die Ausgabe Ihres Skripts zu sehen .
Nach Ihrer Beschreibung verwenden Sie Windows, haben eine .py
Datei gespeichert und doppelklicken darauf, um sie auszuführen. Das sich öffnende Terminalfenster wird geschlossen, sobald Ihr Programm endet, sodass Sie nicht sehen können, was das Ergebnis Ihres Programms war. Um dies zu lösen, empfiehlt Ihr Buch das Hinzufügen eines raw_input
/input
, 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 gelaufen ist. Möglicherweise ist es einfacher, eine Eingabeaufforderung oder IDLE zu verwenden.
Wenn Sie sich das Ordnerfenster ansehen, das Ihr Python-Programm enthält, halten Sie die Umschalttaste gedrückt und klicken Sie mit der rechten Maustaste auf eine beliebige Stelle im weißen Hintergrundbereich des Fensters. Das sich öffnende Menü sollte den Eintrag "Befehlsfenster hier öffnen" enthalten. (Ich denke, das funktioniert unter Windows Vista und Windows 7.) Dadurch wird ein Eingabeaufforderungsfenster geöffnet, das ungefähr so aussieht:
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Users\Weeble\My Python Program>_
Geben Sie Folgendes ein, um Ihr Programm auszuführen (ersetzen Sie Ihren Skriptnamen):
python myscript.py
... und drücken Sie die Eingabetaste. (Wenn Sie die Fehlermeldung erhalten, dass "Python" kein erkannter Befehl ist, lesen Sie http://showmedo.com/videotutorials/video?name=960000&fromSeriesID=96. ) Wenn Ihr Programm ausgeführt wird, wird das Fenster unabhängig davon abgeschlossen, ob es erfolgreich abgeschlossen wurde oder nicht bleibt geöffnet und die Eingabeaufforderung wird erneut angezeigt, damit Sie einen anderen Befehl eingeben können. Wenn Sie Ihr Programm erneut ausführen möchten, können Sie den Aufwärtspfeil drücken, um den zuvor eingegebenen Befehl abzurufen, und die Eingabetaste drücken, um es erneut auszuführen, anstatt jedes Mal den Dateinamen eingeben zu müssen.
IDLE ist ein einfacher Programmeditor, der mit Python installiert wird. Unter anderem können Ihre Programme in einem Fenster ausgeführt werden. Klicken Sie mit der rechten .py
Maustaste auf Ihre Datei und wählen Sie "Im Leerlauf bearbeiten". Wenn Ihr Programm im Editor angezeigt wird, 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 dem Ende Ihres Programms geöffnet bleibt und in dem Sie Python-Befehle eingeben können, die sofort ausgeführt werden sollen.
pythonw -m idlelib.idle
Die Lösung von Timmerman funktioniert hervorragend, wenn der Code ausgeführt wird. Wenn Sie jedoch Undefined name
bei der Verwendung von Pyflakes oder einem ähnlichen Linter keine Fehler erhalten möchten, können Sie stattdessen Folgendes verwenden:
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
oder pyflakes
, um nicht alle Tages mit sinnlose Warnungen in Anspruch nehmen.
Hier ist ein Teil des Codes, den ich in meine Skripte eingefügt habe und den ich nicht in einer py2 / 3-agnostischen Umgebung ausführen möchte:
# 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 Roheingaben ist normalerweise zeitaufwändig (Warten auf Eingaben), daher ist dies nicht wichtig.
Theoretisch können Sie sogar raw_input anstelle von real_raw_input zuweisen. Möglicherweise gibt es jedoch Module, die das Vorhandensein von raw_input überprüfen und sich entsprechend verhalten. Es ist besser, auf der sicheren Seite zu bleiben.
Wahrscheinlich nicht die beste Lösung, aber bevor ich hierher kam, habe ich dies im laufenden Betrieb gemacht, um weiter zu arbeiten, ohne eine kurze Pause vom Studium zu machen.
def raw_input(x):
input(x)
Wenn ich dann raw_input('Enter your first name: ')
das Skript ausführe, an dem ich gearbeitet habe, erfasst es es wie gewohnt input()
.
Es kann einen Grund geben, dies nicht zu tun, auf den ich noch nicht gestoßen bin!
raw_input = input
?