python string-Vergleich (==) funktioniert nicht
Warum die folgenden String-Vergleich funktioniert nicht?
Ich habe den folgenden code (angepasst ich es zu machen ist einfacher). Bekomme ich einen Spieler aus der Datenbank und das hinzufügen zu einer Liste von Spielern. Dann habe ich die loop auf der Liste der Spieler und versuchen, es zu finden, und sogar tho' der string ist der gleiche, der Vergleich false zurück..
def findPlayer2(self, protocol, playerId):
cur = self.conn.cursor()
cur.execute("SELECT playerId, playerName, rating FROM players WHERE playerId LIKE (%s)", [playerId])
nbResult = cur.rowcount
result = cur.fetchone()
cur.close()
if nbResult > 0:
player = Player(protocol, str(result[0]), str(result[1]), result[2])
self.players.append(player)
for player in self.players:
id1 = str(player.playerId)
id2 = str(playerId)
print type(id1)
print type(id2)
print "Comparing '%s' with '%s'" % (id1, id2)
# HERE IS THE COMPARISON
if id1 == id2:
print "Equal! Player found!"
return player
else:
print "Not equal :("
Geben das folgende Ergebnis:
<type 'str'>
<type 'str'>
Comparing '11111111' with '11111111'
Not equal :(
Verwenden
Scheint, wie Sie haben Recht, hier ist das neue Ergebnis: Vergleich von "11111111" mit "11111111\x00". Wissen Sie, warum dies geschehen?
was war der Typ playerID, dass war an die Funktion gesendet werden? welche python version?
%r
statt '%s'
. Vielleicht haben einige nicht-druckbare Zeichen oder Plagiate.Scheint, wie Sie haben Recht, hier ist das neue Ergebnis: Vergleich von "11111111" mit "11111111\x00". Wissen Sie, warum dies geschehen?
was war der Typ playerID, dass war an die Funktion gesendet werden? welche python version?
InformationsquelleAutor Henri Lapierre | 2013-06-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Scheinen Sie ein string-Fehler in der Verarbeitung.
PlayerId
scheint zu sein, die eine C-Zeichenfolge gespeichert wird in einem unicode-String.Hintergrund:
C
verwendet ein nullbyte (\x00
) markieren das Ende einer Zeichenfolge. Da das nullbyte ist in Ihrem string landet es in der string-Darstellung des Objekts.Können Sie einen Blick hier, für einige Referenz. Aber ohne mehr code, ich bin mir nicht sicher über die Ursache/fix.
Haben Sie versucht
type(playerId)
?Bearbeiten: ich weiß nicht, was python-Implementierung, die Sie verwenden, für cpython-look hier
Leider bin ich nicht in der Firma ist im-Anbindung c und python, allerdings könnten Sie versuchen, zu verwenden
PyString_FromString
konvertieren es auf der c-Seite zu einem python-string oder einige handgefertigte Funktion (z.B. split mit regex auf den ersten unescaped 0).Einige Schnittstellen libs aufgeführt sind in diesem awnser
Eigentlich habe ich nur entfernt das Letzte Zeichen auf der C-Seite. Scheint zu funktionieren. Danke!
Ok, ich war nicht sicher, ob du die Kontrolle über beide Seiten, aber wie es sich herausstellt, die Sie tun. Check out
PyString_FromString
eh.InformationsquelleAutor ted
Können Sie die Streifen alle nicht-druckbaren Zeichen wie so
InformationsquelleAutor Niklas R