Dict Value vergleichen

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
sgremm
User
Beiträge: 10
Registriert: Mittwoch 17. Oktober 2007, 14:01

Hallo,

ich bin gerade dabei mich in Python einzuarbeiten und habe gleich ein Problem.

Ich möchte den Value Wert eines Dicts vergleichen, aber das funktioniert nicht.

Code: Alles auswählen

if (self.myHellaClient.status['is_paused'] == 'True'):
			print "pause"
		else:	
			print self.myHellaClient.status['is_paused']
Es kommt immer das print nach else obwohl dieses dann True ausgibt.

Was heissen soll, der Wert von self.myHellaClient.status['is_paused'] ist 'True' als String.

Ich hoffe ich habe mich halbwegs deutlich ausgedrückt.

Mfg.

Stefan
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Dumme Frage: Was kommt bei:

Code: Alles auswählen

if (self.myHellaClient.status['is_paused'] == 'True'):
            print "pause"
        else:   
            print type(self.myHellaClient.status['is_paused'])
?

Frage ich nur, um das auch wirklich sicher abzuklären.

Gruß,
Christian
sgremm
User
Beiträge: 10
Registriert: Mittwoch 17. Oktober 2007, 14:01

Vielen Dank für den Anstoss, das war der Fehler. Bei Type kam Boolean.
Habe die If Anweisung geändert und es geht.

Manchmal sieht man vor lauter Wald die Bäume nicht.

Mfg.

Stefan
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hoffentlich nicht

Code: Alles auswählen

if (self.myHellaClient.status['is_paused'] == True):
, oder?

Gruß,
Christian
sgremm
User
Beiträge: 10
Registriert: Mittwoch 17. Oktober 2007, 14:01

ja, genau, das wars. Jetzt habe ich das Problem das ich mit xmlrpc eine methode auf dem Server habe welche continue heisst. Leider komme ich mit

Code: Alles auswählen

self.server.continue()
nicht weiter, da continue ein reserviertes Wort in python ist. Weißt Du ob ich das irgendwie umgehen kann. Lustigerweise ist der Server auch in python programmiert, da scheint es zu gehen.

Mfg.

Stefan
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

sgremm hat geschrieben:ja, genau, das wars.
Verstehe ich gerade nicht, aber wenn ich tatsächlich richtig vermute, daß Du hier einen Anfängerfehler machst, dann hier noch ein wenig Info (ansonsten ist es halt Eulen nach Athen tragen, nimmst Du mir sicher nicht übel):
Es reicht

Code: Alles auswählen

if self.myHellaClient.status['is_paused']:
zu schreiben, da self.myHellaClient.status['is_paused'] zu True oder False evaluiert wird. Und dann steht dort eben nur "if True" oder "if False". Allerdings kann man sich natürlich manchmal auch sagen: "Was soll's? Schreibe ich die Bedingungen halt explizit hin, dann weiß ich auch in drei Jahren noch, was das bedeutet."
sgremm hat geschrieben: Jetzt habe ich das Problem das ich mit xmlrpc eine methode auf dem Server habe welche continue heisst. Leider komme ich mit

Code: Alles auswählen

self.server.continue()
nicht weiter, da continue ein reserviertes Wort in python ist. Weißt Du ob ich das irgendwie umgehen kann.
Nein, das weiß ich nicht so ohne Weiteres. Allerdings sollte es gehen, wenn self.server eine Methode continue() hat, denn man kann in Python durchaus builtins überschreiben.
Was kommt denn für eine Fehlermeldung?

Gruß,
Christian
sgremm
User
Beiträge: 10
Registriert: Mittwoch 17. Oktober 2007, 14:01

Wenn ich

Code: Alles auswählen

self.server.continue()
schreibe, kommt in DrPython folgende Fehlermeldung.

compile:
invalid syntax (PyHellanzb.py, line 81)


Traceback (most recent call last):
File "/usr/bin/drpython", line 641, in CheckSyntax
compile(ctext, fn, 'exec')
<type 'exceptions.SyntaxError'>: invalid syntax (PyHellanzb.py, line 81)
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

sgremm hat geschrieben:Wenn ich

Code: Alles auswählen

self.server.continue()
schreibe, kommt in DrPython folgende Fehlermeldung.

compile:
invalid syntax (PyHellanzb.py, line 81)

Code: Alles auswählen

getattr(self.server, 'continue')()
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Ok, was steht in den Zeilen davor?
BlackJack

Die Fehlermeldung ist korrekt, ``continue`` ist ein Schlüsselwort und keine eingebaute Funktion.

Wie hat der Server diese Methode denn implementiert? Auch dort kann man diesen Namen nicht so direkt verwenden.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

BlackJack hat geschrieben:Die Fehlermeldung ist korrekt, ``continue`` ist ein Schlüsselwort und keine eingebaute Funktion.
Autsch, ja. Danke. Ich vermutete, daß im Code vorher eine Klammer fehlt oder so was, aber Schlüsselwörter sind in der Tat eine andere Baustelle ...
sgremm
User
Beiträge: 10
Registriert: Mittwoch 17. Oktober 2007, 14:01

Ich habe die Zeile ausgewechselt mit getattr und nun geht es.

Was macht genau getattr?

Mfg.

Stefan
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

sgremm hat geschrieben:Was macht genau getattr?
getattr gibt ein Attribut mit einem bestimmten Namen von einem Objekt zurück. getattr(self.server, 'continue') wäre also äquivalent zu self.server.continue.
sgremm
User
Beiträge: 10
Registriert: Mittwoch 17. Oktober 2007, 14:01

Vielen Dank an alle, bin jetzt wieder ein wenig schlauer.

Schönen Abend

Stefan
Antworten