Vergleich funktioniert nicht und continue wird ignoriert

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Ich verzweifel gerade an einer Schleife in Python, leider kriege ich da ein total unlogisches Verhalten.

    Der Code ist:

    Dabei funktioniert erstens diese Stelle nicht:

    Code
    print 'Wanted: ', MIFAREReader.MI_OK, ' Found: ', status
                if status != MIFAREReader.MI_OK:

    Der Enumerator ist genau das, was auf diese Variable drauf geschrieben werden soll, und die Ausgabe an der Stelle lautet auch ganz klar:

    Code
    Wanted:  0  Found:  0


    TROTZDEM geht der Code in die If Bedingung rein! Versteh ich nicht.

    Der zweite Punkt ist, das in dieser If Bedingung am Ende ein continue steht, das wird aber anscheinend total ignoriert, denn der Code läuft hier einfach weiter, was im Folgenden dann zu Fehlern führt.
    Hat jemand eine Idee wie das zu erklären ist?
    Bin da mit meinem Latein am Ende, wenn einfachste Vergleiche einfach nicht funktionieren....

    Was mich jetzt total verwirrt ist das es "von Hand" klappt:

    Einmal editiert, zuletzt von RyuKajiya (5. Januar 2015 um 19:27)

  • Vergleich funktioniert nicht und continue wird ignoriert? Schau mal ob du hier fündig wirst!

    • Offizieller Beitrag

    Wenn er hier

    Code
    if status != MIFAREReader.MI_OK:

    in die Scheife geht, werden die beiden wohl ungleich sein, sonst würde er es nicht machen
    mach mal direkt darüber

    Code
    print status
    print type(status)
    print MIFAREReader.MI_OK
    print type(MIFAREReader.MI_OK)
  • Ich glaube, zu Deinem continue zu sehen, dass es unter dem 2. if hängt. Müsste es nicht eine Einrückung nach vorne?
    Zum Hauptproblem hast Du schon mal geprüft, ob die Dateitypen gleich sind? Also zwei Zahlen oder zwei Strings?

    Mit den Dateitypen war ich zu langsam!

  • Ja.
    Dann wird die Variable cardID auf leeren String gesetzt.
    Dann läuft der auch einfach über das "continue" weg, und rennt durch den Rest des Codes, so das ich auch

    Code
    Card found:  136-4-121-135  old Card:


    aus Ausgabe kriege.
    Eigentlich soll das ja verhindert werden, in dem ich die foundID mit der cardID vergleiche, und nicht jedes mal den weiteren Code durchlaufe...

    Das continue ist schon richtig eingerückt, es soll ja dann passieren, wenn die If Bedingung stimmt. Also der Status nicht OK ist. Daher ist es eingerückt. Wird nur völlig ignoriert...

    Wie kann ich am besten Python mal komplett neu installieren auf dem RPi ?
    apt-get autoremove python
    apt-get install python
    ?
    Oder ist das anders installiert in Noobs-Raspbian Umgebung ?

    Einmal editiert, zuletzt von RyuKajiya (5. Januar 2015 um 20:26)

  • Also wenn so einfache Dinge nicht funktionieren ist es meist ein Flüchtigkeits- oder Denkfehler. Meist ein Leerzeichen zu viel oder eine Variable falsch geschrieben. Python solltest Du deswegen nicht neu installieren.
    Nochmal zu Deinem continue. Das soll also wirklich nur zutreffen, wenn idFile existiert?


    Nochmal zu Deinem continue. Das soll also wirklich nur zutreffen, wenn idFile existiert?


    Siehste, das war Unsinn. Wenn man ständig zwischen Programmiersprachen springt passiert sowas.

  • Welche Methode ?
    Passiert doch, also "status" ist doch eine Variable.
    Und MIFAREReader.MI_OK ist eine globale statische Variable aus der Bibliothek.

    Nach vielen prints und großen Umbauten in der Funktion hab ich festgestellt, das die Funktion um den Status und Tag auszulesen jedes zweite mal ein Error zurück gibt, ganz egal ob nun ein RFID Tag auf dem Leser liegt oder nicht.

    Also wenn ein Tag gefunden wird merken das nächste Error ignoriert wird, und schon klappt es so wie ich es wollte. Warum an manchen Stellen das so seltsam war weiß ich immer noch nicht, aber jetzt klappt es so wie es soll. Zwar schmutzig und eher gefrickelt, aber solange es Funktioniert mir die B Note jetzt mal egal.

    So sieht es nun aus:

    Einmal editiert, zuletzt von RyuKajiya (5. Januar 2015 um 21:37)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!