2016-07-26 4 views
-1

Ich habe vor kurzem den Wechsel zu Python 3 gemacht und normale Dinge, die normalerweise mit Python 2 arbeiten, funktionieren nicht mit Python 3. Ich konnte den Rest beheben, aber ich kämpfe mit dieses. Ich kann nicht überprüfen, was "Typ" ist.Wie mache ich wenn sonst für python3 arbeiten?

raw = input("Please give me a number, string\ 
or decimal: ") 
if type(raw) == int: 
    print("You entered a number") 
elif type(raw) == float: 
    print("You entered a decimal") 
elif type(raw) == str: 
    print("You entered a string") 
else: 
    print("error please try again") 

`

+0

es sollte eingegeben Sie einen String :) bin ich richtig? –

Antwort

5

In python3.x kehrt input immer ein Objekt vom Typ str. Das Äquivalent zu python2.x wäre eval(input('...')). Wie bei eval jederzeit verwenden, stellen Sie sicher, dass Sie unbedingt darauf vertrauen, dass der Eingang bösartige Dinge nicht zu Ihrem Programm oder Computer tun ...

A besser Weise so etwas wie ast.literal_eval zu verwenden wäre (was sicher Ihre Literale) bewerten oder selbst die Kontrolle zu tun ...

def is_int_str(s): 
    """Checks if a string (s) represents a python integer.""" 
    try: 
     int(s) 
    except ValueError: 
     return False 
    return True 

und es trivial ist, um dann schreiben die analoge float Version ...

+0

Es gibt isdigit/isnumeric-Methoden in der String-Bibliothek, die hier wahrscheinlich verwendet werden sollten. – story645

+0

@ story645 - Nah ... EAFP :-). Versuchen Sie einfach, die Zeichenfolge in den entsprechenden Typ zu konvertieren und sehen Sie, ob es funktioniert ... – mgilson

+0

meh, ich mag die String-Bibliothek für diese ... aber wirklich, alles, was nicht eval ist wahrscheinlich gut. – story645