Was bedeutet das?

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
Scamander_1920
User
Beiträge: 31
Registriert: Sonntag 26. November 2017, 11:57

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?
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Scamander_1920
User
Beiträge: 31
Registriert: Sonntag 26. November 2017, 11:57

Ja, das war mir auch klar, aber die Variable wurde nie als input verwendet.
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Scamander_1920
User
Beiträge: 31
Registriert: Sonntag 26. November 2017, 11:57

Ah ok, vielen Dank
Benutzeravatar
pixewakb
User
Beiträge: 1411
Registriert: Sonntag 24. April 2011, 19:43

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.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@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.
Benutzeravatar
pixewakb
User
Beiträge: 1411
Registriert: Sonntag 24. April 2011, 19:43

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.
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Benutzeravatar
pixewakb
User
Beiträge: 1411
Registriert: Sonntag 24. April 2011, 19:43

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!
Benutzeravatar
DeaD_EyE
User
Beiträge: 1016
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

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
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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.
Benutzeravatar
pixewakb
User
Beiträge: 1411
Registriert: Sonntag 24. April 2011, 19:43

Danke für den Hinweis, es könnte sein, dass ich mein Scrapen vereinfachen kann und es mir bislang noch gar nicht aufgefallen war...
Antworten