Seite 1 von 1

Was bedeutet das?

Verfasst: Samstag 6. Oktober 2018, 17:02
von Scamander_1920
Mir wird dieser Fehler angezeigt:

if Speicher_1 >= speicher_2:
TypeError: unorderable types: int() >= str()

Was könnte ich falsch gemacht haben und was bedeutet das überhaupt?

Re: Was bedeutet das

Verfasst: Samstag 6. Oktober 2018, 17:08
von __deets__
Die Fehlermeldung sagt das doch ganz deutlich: du versuchst eine Zahl mit einer Zeichenkette zu vergleichen. Und das ist nicht sinnvoll möglich. Oder wie würdest du die Frage “Ist ‘Haus’ größer 10” beantworten?

Ich nehme an du hast eine Eingabe, die die vergleichen willst. Dann musst du die zuerst in eine Zahl wandeln. Also zB int(“10”). Oder int(speicher_12353467171910) für Leute, die Variablen gerne komisch durchnummerieren.

Re: Was bedeutet das?

Verfasst: Samstag 6. Oktober 2018, 17:16
von Scamander_1920
Ja, das war mir auch klar, aber die Variable wurde nie als input verwendet.

Re: Was bedeutet das?

Verfasst: Samstag 6. Oktober 2018, 17:18
von __deets__
Ich kann ja nur raten woher die kommt. Schreibst du ja nicht. Und die Fehlermeldung ist, was sie ist. Ob du den Inhalt eingelesen hast, oder hingeschrieben, oder was auch immer - eine Variable enthält eine Ganzzahl, die andere einen String.

Re: Was bedeutet das?

Verfasst: Samstag 6. Oktober 2018, 17:20
von Scamander_1920
Ah ok, vielen Dank

Re: Was bedeutet das?

Verfasst: Samstag 6. Oktober 2018, 17:35
von pixewakb
Ich mache so etwas schon mal ganz gern:

Code: Alles auswählen

>>> speicher_1 = "1"
>>> speicher_2 = 2
>>> print([speicher_1], [speicher_2])
['1'] [2]
Das Einrahmen einer Variable mit eckigen Klammern, lässt dich in der Konsole sehr genau erkennen, was genau da in der Variable enthalten ist.

Re: Was bedeutet das?

Verfasst: Samstag 6. Oktober 2018, 17:40
von snafu
@pixewakb:
Wenn man einfach speicher_1 oder speicher_2 in der Konsole als Befehl eingegeben hätte, wäre das Gleiche rausgekommen. Nur ohne eckige Klammern.

Re: Was bedeutet das?

Verfasst: Samstag 6. Oktober 2018, 17:58
von pixewakb

Code: Alles auswählen

>>> print(speicher_1, speicher_2)
1 2
Nein, das ist nicht identisch. Ich finde das mit den eckigen Klammern insbesondere beim Scrapen von Webseiten nützlich und habe es mir da angewöhnt. Man kann dann die Steuerzeichen, die sich vielleicht in einem String noch verstecken, so leichter identifizieren.

Re: Was bedeutet das

Verfasst: Samstag 6. Oktober 2018, 18:10
von __deets__
Du sollst ja acuh nicht print machen. Sondern nur die Werte. Dann spuckt der Interpreter die „repr“-Form aus. Womit das auch generell geht, ohne Liste drumherum:

print(repr(v))

Groß kürzer als dein Vorgehen ist das natürlich nicht.

Re: Was bedeutet das?

Verfasst: Samstag 6. Oktober 2018, 18:17
von pixewakb
repr() kannte ich noch nicht; die Werte allein ausgeben - ohne print -, dürfte im normalen Programmfluss schwierig sein, letztlich bestehen - zumindest bei mir - bestimmte Variablen-Zuweisungen nur zur Laufzeit...
Danke für den Hinweis!

Re: Was bedeutet das?

Verfasst: Sonntag 7. Oktober 2018, 12:34
von DeaD_EyE
Nutzt ihr nicht die interaktive REPL?

python -i programm.py

Wenn man nur den Namen eines Objektes eingibt, wird die Repräsentation des Objektes automatisch angezeigt. Nutzt man print, wird zuerst versucht das auszugeben, was die methode __str__() zurück liefert. Wenn diese Methode nicht definiert ist, wird automatisch __repr__() verwendet, was die Repräsentation des Objektes ist. Deswegen wird z.B. das Datetime-Objekt formatiert, sobald man es mit print ausgibt. Gibt man nur den Namen des DT-Objektes an, wird einem im Terminal die Repräsentation gezeigt. Die Funktion repr() gibt explizit die Repräsentation wieder. Mit der format methode lässt sich definieren, ob die Repräsentation oder der String verwendet werden soll.

Code: Alles auswählen

print(f'{datetime.datetime.now()}') # implizit str
print(f'{datetime.datetime.now()!s}') # explizit str
print(f'{datetime.datetime.now()!r}') # explizit repr

Re: Was bedeutet das?

Verfasst: Sonntag 7. Oktober 2018, 19:53
von /me
pixewakb hat geschrieben: Samstag 6. Oktober 2018, 17:35 Das Einrahmen einer Variable mit eckigen Klammern, lässt dich in der Konsole sehr genau erkennen, was genau da in der Variable enthalten ist.
Und mit print(type(variablenname)) kann man sich dann auch sicher sein.

Re: Was bedeutet das?

Verfasst: Sonntag 7. Oktober 2018, 20:04
von pixewakb
Danke für den Hinweis, es könnte sein, dass ich mein Scrapen vereinfachen kann und es mir bislang noch gar nicht aufgefallen war...