Python If-Abfrage lässt mich verzweifeln

mausweazle

Lt. Commander
Registriert
Mai 2008
Beiträge
1.633
Hallihallo liebe Community,

ich habe ein dummes Problem mit einer IF-Abfrage mit zwei Bedingungen. Egal welche Werte lowerIndex oder upperIndex annehmen, Python geht immer in die erste Bedingung rein:

lowerIndex = 0
upperIndex = 0

if (lowerIndex != 0 and upperIndex != 0):
querySentence = {'articleId': {'$gte': lowerIndex, '$lt': upperIndex}}
elif (lowerIndex != 0 and upperIndex == 0):
querySentence = {'articleId': {'$gte': lowerIndex}}
elif (lowerIndex == 0 and upperIndex != 0):
querySentence = {'articleId': {'$lt': upperIndex}}
elif (lowerIndex == 0 and upperIndex == 0):
querySentence = {'articleId':{'$gte': lowerIndex}}
print querySentence


Ausgabe:
{'articleId': {'$gte': '0', '$lt': '0'}}

Wenn lowerIndex und upperIndex null sind, soll die Ausgabe aber so aussehen:
{'articleId': {'$gte': '0'}


Was mache ich falsch? Hab beim ersten IF auch schon <> statt != versucht. Außerdem hab ich die Klammerung schon jeden Ausdruck einzeln gehabt. Ich weiß nicht, was ich falsch mache. Bitte Hilfe

edit: Einrückungen sind verloren gegangen. Alle Zeilen mit querySentence = .... sind eingerückt im Code
 
Also wenn bei upper und lower = 0 die ausgabe so aussehen soll, wie du angibtst, dann solltest du
den Code im entsprechenden Fall auch so überarbeiten.
Statt {'articleId': {'$gte': lowerIndex, '$lt': upperIndex}
nur ein {'articleId': {'$gte': lowerIndex'} ??
Wenn du den Code immer so ausführst, mit den
obrigen beiden Zeilen, ist klar, warum er immer nur in die erste Fallunterscheidung geht.
(Absolut kein Python-wissen(also ich;)))
Edit: Ich seh gerade ich hab einen Denkfehler gemacht. Bitte dies zu entschuldigen. =)
Hast du dir schon geprüft, ob die Werte auch so wie du sie haben möchtest übernommen werden bzw
welche Werte der Rechner konkret vergleicht?
Könnte es vllt. sein, dass du das IF bei python Klammern musst?
Mfg
Mika
 
Zuletzt bearbeitet:
Hab deinen Code gerade kopiert und ausgeführt und mit allen 4 Möglichkeiten getestet und was soll ich sagen, klappt anstandslos. Und vom Code her siehts ja auch ok aus. Wenn beide Variablen 0 sind, springt das Skript bei mir auch in die 4. Bedingung, so wie es sein soll.
Edit: Benutze Eclipse+PyDev mit Python 2.7
 
Zuletzt bearbeitet:
Dann kann man davon ausgehen, dass du deine Testwerte nicht oder falsch übermittelst/einstellst.
Passiert. =)
 
Das ist ja interessant. Ich habe direkt über dem if-Block mir mit print lowerIndex und print upperIndex die Werte ausgeben lassen und die sind auch korrekt übermittelt worden an die Funktion, in der der If-Block ist. Ich führe den Code auf nem Server per Commandline aus mit "python program.py". Python-version ist 2.7.

Edit: hab die Ursache des Fehlers gefunden, weiß aber noch nicht wie ich das beheben kann.

Ich hab lowerIndex und upperIndex als command line parameter. Die werden übergeben mit -i lowerIndex -I upperIndex. Wenn ich die beiden nicht aus der Command line lese, sondern mit 0 per Hand initialisiere, dann klappt mein code auch. Wenn ichs aus der Command line lese, geht er immer in die erste bedingung.

ohne Commandline parsing
{'articleId': {'$gte': 0}}
0 <- lowerIndex
0 <- upperIndex

mit commandline parsing
{'articleId': {'$gte': '0', '$lt': '0'}}
0 <- lowerIndex
0 <- upperIndex
 
Zuletzt bearbeitet:
Vielleicht werden die Variablen als String und nicht als Int eingelesen. Du könntest mal explizit eine Umwandlung einbauen:
Code:
lowerIndex = int(lowerIndex)
upperIndex = int(upperIndex)
 
Fehler gefunden -.-
Anfängerfehler:
Python liest natürlich alles von der Commandline als String und vergleicht es dann mit der Zahl 0. Dabei ist 0 nicht gleich 0 als String. Fiese Sache

@cx01
genau. Damit hats geklappt. Danke
 
Zurück
Oben