2016-04-23 27 views
-1

Ich versuche, den Wert (als eine Zeichenfolge) einer StringProperty aber ohne Erfolg zu erhalten. Ich muss es durchlaufen und es wird ein Fehler ausgelöst, wenn ich nur versuche, die Eigenschaft zu durchlaufen, da es nicht iterierbar ist. Wie könnte ich eine StringProperty in eine Python-Zeichenfolge konvertieren oder in etwas, das ich durchlaufen kann und das eine len?Iterate durch StringProperty

EDIT:

Dies ist, wie ich die Art erklären, der das Problem hat:

class Game(ndb.Model): 
"""Game object""" 
target = ndb.StringProperty(required=True) 
attempts_allowed = ndb.IntegerProperty(required=True) 
attempts_remaining = ndb.IntegerProperty(required=True, default=5) 
game_over = ndb.BooleanProperty(required=True, default=False) 
user = ndb.KeyProperty(required=True, kind='User') 
users_word = ndb.StringProperty(required=True) 

Die letzte Eigenschaft ist diejenige, die ich durchlaufen müssen. Und dies ist die Funktion, die einen Fehler auslöst:

@classmethod 
def update_users_word(self, letter): 
    word_as_list = list(self.users_word) 
    print ("String is: " + str(getattr(self, 'users_word'))) 

    for pos in self.find_letter_positions_in_word(letter, self.target): 
     word_as_list[pos] = letter 

    self.users_word = ''.join(word_as_list) 

und dies ist die genauen Fehler:

Number/models.py", line 59, in update_users_word 
word_as_list = list(self.users_word) 
TypeError: 'StringProperty' object is not iterable 

Hoffnung dies deutlicher jetzt ist

+0

Fragen, die Debugging-Hilfe suchen ("Warum funktioniert dieser Code nicht?") Müssen das gewünschte Verhalten, ein bestimmtes Problem oder einen Fehler und den kürzesten Code enthalten, der für die Reproduktion in der Frage erforderlich ist. Fragen ohne eine klare Problemstellung sind für andere Leser nicht nützlich. Siehe: Erstellen eines minimalen, vollständigen und überprüfbaren Beispiels. –

+2

Eine StringProperty * ist * eine Zeichenfolge, und Sie * können * darüber iterieren. Wenn Sie Probleme haben, sollten Sie den tatsächlichen Code und die Fehler veröffentlichen. –

+0

[lesen Sie für ** Verständnis ** * spezifisches Problem oder Fehler und den ** kürzesten Code erforderlich, um zu reproduzieren **. *] (Http://Stackoverflow.com/help/mcve), da Sie die einzige Person sind, die dies hat Problem, weil es Typ "Str" oder "Unicode" ist, ist es wahrscheinlich, dass ** Ihr ** Code falsch ist. –

Antwort

1

Sie dies als Class erklärt. Das heißt, self ist keine Instanz des Spiels, aber die Klasse selbst. So bezieht sich self.user_word auf die Eigenschaft, die für die Klasse definiert ist, nicht auf die Zeichenfolge, die über die Instanz verfügbar wäre.

Verwenden Sie stattdessen einen normalen Dekorateur oder lassen Sie ihn einfach als Standardmethode.

+0

Tausend Dank! –