Problem mit Variablenvergleich

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
KiS
User
Beiträge: 19
Registriert: Samstag 29. April 2006, 07:26

Dienstag 30. Mai 2006, 16:42

Mein Problem sieht wie folgt aus:

Code: Alles auswählen

import os
import MySQLdb
verbindung=MySQLdb.connect(host='localhost',db='watchdog',user='root',passwd='test')
c=verbindung.cursor()
c.execute('USE watchdog')
while True:
    x=raw_input("Bitte Port eingeben:")
    print x

    anfrage4='''
    Select Death
    FROM watchdog
    WHERE Port='''+x
    c.execute(anfrage4)
    death=c.fetchone()[0]
    print death

While True:
       if ping == 0:
             i=0
             print i
             print 'ok'
Ich hol mir meine ganzen Daten die ich benötige von einer MySQL Datenbank. Zuerst frage ich mit x nach dem Port eines Servers. Anschließend mach ich eine Abfrage, die mir die Zahl death aus der Datenbank liefern soll. Dann ping ich den Server an. Die 0 steht dafür, dass es möglich war den Server anzupingen.
Das klappt auch alles. Nur jetzt kommt mein Problem und ich hoffe ihr könnt mir helfen :D Wenn der Server jetzt nicht angepingt werden konnte dann soll in der else-Anweisung folgendes passieren:

Code: Alles auswählen

       else:
             i=i+1
             print i
             if i == death:
                       print 'server wird erneut angepingt'
                       break
             else:
                       print 'server wurde angepingt'
                       continue
ich habe eine Variable i eingeführt, die den Anfangswert 0 hat und immer um eins erhöht wird. Das klappt auch noch nur mein Problem ist, dass er nicht die if-Anweisung i==death erkennt. Nur wenn ich death als fixe Zahl definiere dann funktioniert es. Nur in meinem Fall ist death variabel und kann jede Zahl annehmen. Als bitte kann mir wer helfen???

Edit (Leonidas): Titel geändert. *grml*
Benutzeravatar
DatenMetzgerX
User
Beiträge: 398
Registriert: Freitag 28. April 2006, 06:28
Wohnort: Zürich Seebach (CH)

Dienstag 30. Mai 2006, 16:58

Ich kenn mich mit DBs nicht so aus, aber wenn endet diese Schleife?

Code: Alles auswählen

while True:
    x=raw_input("Bitte Port eingeben:")
    print x

    anfrage4='''
    Select Death
    FROM watchdog
    WHERE Port='''+x
    c.execute(anfrage4)
    death=c.fetchone()[0]
    print death
True ist immer True :roll:
KiS
User
Beiträge: 19
Registriert: Samstag 29. April 2006, 07:26

Dienstag 30. Mai 2006, 17:25

die endet nie wenn du es genau wissen willst und das soll auch so sein. Aber der untere Teil gehört auch noch zum Programm dazu.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Dienstag 30. Mai 2006, 17:44

KiS hat geschrieben:

Code: Alles auswählen

       else:
             i=i+1
             print i
             if i == death:
                       print 'server wird erneut angepingt'
                       break
             else:
                       print 'server wurde angepingt'
                       continue
[...]nur mein Problem ist, dass er nicht die if-Anweisung i==death erkennt.
Hi KiS!

death ist wahrscheinlich keine Zahl.
String und Zahl kannst du nicht miteinander vergleichen

Code: Alles auswählen

             print type(i)
             print type(death)
             if i == int(death):
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 30. Mai 2006, 20:03

KiS hat geschrieben:

Code: Alles auswählen

    anfrage4='''
    Select Death
    FROM watchdog
    WHERE Port='''+x
    c.execute(anfrage4)
Bitte, escape doch :idea:

Hat dir BlackJack übrigens ein, nein zwei Mal gesagt.

Eigentlich hat das BlackJack schon ganz oft gesagt: [1], [2], [3].

Btw: Gib dem armen Thread doch bitte einen sinnvollen Titel.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
KiS
User
Beiträge: 19
Registriert: Samstag 29. April 2006, 07:26

Dienstag 30. Mai 2006, 20:42

Danke Leute. Ihr habt mir sehr geholfen. Jetzt funzt es. Thx :D
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Dienstag 30. Mai 2006, 23:27

Ich hoffe, du hast escaping eingebaut. Ansonsten freue ich mich schon, als Port

Code: Alles auswählen

42; DELETE FROM watchdog
anzugeben :twisted:
Antworten