Seite 1 von 1

Dict Value vergleichen

Verfasst: Mittwoch 17. Oktober 2007, 14:15
von sgremm
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

Verfasst: Mittwoch 17. Oktober 2007, 14:21
von CM
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

Verfasst: Mittwoch 17. Oktober 2007, 14:31
von sgremm
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

Verfasst: Mittwoch 17. Oktober 2007, 15:14
von CM
Hoffentlich nicht

Code: Alles auswählen

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

Gruß,
Christian

Verfasst: Mittwoch 17. Oktober 2007, 15:50
von sgremm
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

Verfasst: Mittwoch 17. Oktober 2007, 15:55
von CM
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

Verfasst: Mittwoch 17. Oktober 2007, 16:05
von sgremm
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)

Verfasst: Mittwoch 17. Oktober 2007, 16:09
von Trundle
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')()

Verfasst: Mittwoch 17. Oktober 2007, 16:09
von CM
Ok, was steht in den Zeilen davor?

Verfasst: Mittwoch 17. Oktober 2007, 16:10
von 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.

Verfasst: Mittwoch 17. Oktober 2007, 16:13
von CM
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 ...

Verfasst: Mittwoch 17. Oktober 2007, 16:14
von sgremm
Ich habe die Zeile ausgewechselt mit getattr und nun geht es.

Was macht genau getattr?

Mfg.

Stefan

Verfasst: Mittwoch 17. Oktober 2007, 16:24
von Trundle
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.

Verfasst: Mittwoch 17. Oktober 2007, 17:13
von sgremm
Vielen Dank an alle, bin jetzt wieder ein wenig schlauer.

Schönen Abend

Stefan