646 Stimmen

Wie kann ich raw_input in Python 3 verwenden?

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

Ich verwende Python 3.1 und kann nicht die raw_input um 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 zu beheben?

7voto

ChewbaccaKL Punkte 351

Hier ist ein Stück Code, den ich in meine Skripte einbaue, die ich 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 Rohdaten ist in der Regel zeitaufwendig (Warten auf die Eingabe), so dass es nicht wichtig ist.

Theoretisch können Sie sogar raw_input anstelle von real_raw_input zuweisen, aber es könnte Module geben, die das Vorhandensein von raw_input prüfen und sich entsprechend verhalten. Es ist besser, auf der sicheren Seite zu bleiben.

2voto

George Birbilis Punkte 2619

Wie wäre es mit dem folgenden? Sollte es Ihnen ermöglichen, entweder raw_input oder input sowohl in Python2 als auch in Python3 mit der Semantik von Python2's raw_input (auch bekannt als die Semantik von Python3's input) zu verwenden

# 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

1voto

Danijel-James W Punkte 1268

Wahrscheinlich ist das nicht die beste Lösung, aber bevor ich hierher kam, habe ich das einfach so gemacht, um weiterarbeiten zu können, ohne eine kurze Pause vom Lernen zu haben.

def raw_input(x):
  input(x)

Wenn ich dann die raw_input('Enter your first name: ') in dem Skript, an dem ich gearbeitet habe, wird es wie folgt erfasst input() würde.

Vielleicht gibt es einen Grund, dies nicht zu tun, den ich noch nicht gefunden habe!

1voto

Pausi Punkte 36

Eine andere Möglichkeit besteht darin, eine neue Funktion zu erstellen.

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

wie zu verwenden:

str_input("Your Name: ")

Ich verwende dies, wenn ich Skripte und Eingaben erstellen möchte, die in Python2 und Python3 ausgeführt werden können

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X