Datentyp abfragen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
koukoun
User
Beiträge: 27
Registriert: Freitag 27. April 2007, 15:55

Hallo Amigos,
im einfachsten fall habe ich z.B. :
a = "12"
ich hab (import type) angegeben und jetzt will ich überprüfen ob a ein Str ist:

mit dem Befehl type.StringType() sollte es gehen aber ich mach irgendwas falsches...

import types
a = "12"
if a==types.StringType():
print "Hallo Word"

>>> hier wird nichts angezeigt


wenn ich angebe:

if a!=types.StringType():
print "Hallo Word"

>>> Hallo Word (hier wird "Hallo Word" angezeigt egal ob a = "12" oder a = 12)

kann jemand mir einen Tipp geben?

Danke
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Du willst

Code: Alles auswählen

if isinstance(a, str)
Der Code

Code: Alles auswählen

a == types.StringType()
ist gleich

Code: Alles auswählen

a == ""
.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

1. Du solltest nicht nur, du musst sogar deinen Code in [ code = py ]
Tags setzen (ohne Leerzeichen) damit man sieht welche Einrückungen du gemacht hast.

Code: Alles auswählen

x = 123
y = "123"
z = "Test"

# == True kann man auch weglassen
if str(x).isdigit() == True:
    print "X ", x - 12
    # gibt "X 111" aus

if str(y).isdigit() == True:
    print "Y ", int(y) - 12
    # gibt "Y 111" aus aber nur weil wir y in ein Int umgewandelt haben
    # den Python erkennt das `y` nur aus Zahlen besteht, auch wenn es
    # als String gespeichert ist

if str(z).isdigit() == True:
    print "Z ", z
     # gibt nichts aus weil `z` keine Int ist und kein String der nur Zahlen enthält
[/code]

*EDIT*
hatte kein Python zum testen .isdigit geht nur bei Strings habe also die Variablen noch in str() gepackt.
Das scheint zwar unpracktich, aber wenn man mit mod_python codet kommen alle Werte als Strings rein und da nutze ich diese Funktion.
Alternativ könnte ich auch einfach Strings zu Int umwandeln um mit try: und Except Fehleabfangen, find da die isdigit Methode aber besser.
Zuletzt geändert von Sr4l am Freitag 11. Mai 2007, 14:29, insgesamt 2-mal geändert.
Zizibee
User
Beiträge: 229
Registriert: Donnerstag 12. April 2007, 08:36

Sr4!, da ich in deinem Code nicht verstanden habe was isdigit() genau macht (da es ja scheinbar immer True zurückliefert) hab ich deinen Code mal in Python kopiert und bekomme immer folgende Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "test2.py", line 6, in <module>
    if x.isdigit() == True:
AttributeError: 'int' object has no attribute 'isdigit'
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Sr4l hat geschrieben:

Code: Alles auswählen

# == True kann man auch weglassen
if x.isdigit() == True:
"Kann man weglassen" ist falsch formuliert. "Wers nicht weglässt, wird gevierteilt" wäre besser.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Zizibee hat geschrieben:Sr4!, da ich in deinem Code nicht verstanden habe was isdigit() genau macht (da es ja scheinbar immer True zurückliefert) hab ich deinen Code mal in Python kopiert und bekomme immer folgende Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "test2.py", line 6, in <module>
    if x.isdigit() == True:
AttributeError: 'int' object has no attribute 'isdigit'
Das liegt daran das isdigit eine String-Operation ist und nicht für int.

Code: Alles auswählen

>>> x = "123"
>>> x.isdigit()
True
>>> x = "123.22"
>>> x.isdigit()
False
>>>
isdigit guckt ob in dem String nur die Zahlen von 0-9 vorhanden sind.

Einen wirklichen Sinn oder gar eine Lernhilfe erkenne ich aus dem Codesnippet da oben nicht...
Zizibee
User
Beiträge: 229
Registriert: Donnerstag 12. April 2007, 08:36

Zap hat geschrieben: isdigit guckt ob in dem String nur die Zahlen von 0-9 vorhanden sind.
Ach so ist das, das klärt natürlich einiges :)
Danke!
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Zap hat geschrieben: isdigit guckt ob in dem String nur die Zahlen von 0-9 vorhanden sind.

Einen wirklichen Sinn oder gar eine Lernhilfe erkenne ich aus dem Codesnippet da oben nicht...
Der Sinn ist das ich gezeigt habe wie man überprüft ob die Variable einen Integer Inhalt hat. 123.22 ist kein Integer mehr.

Ach ich habe die Frage entwas überlesen es ging darum zu prüfen ob a ein String ist :-D
Antworten