2016-04-23 2 views
-1

StringPropertyの値(文字列として)を取得しようとしていますが、成功しません。 私はそれを繰り返し処理する必要があり、iterableではないので、プロパティを反復しようとするとエラーが発生します。 StringPropertyをPython文字列に変換する方法、または反復処理が可能でlenがあるものに変換する方法はありますか?StringPropertyを反復する

EDIT:

これは私が問題を抱えている種類を宣言する方法:

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) 

最後のプロパティは、私が反復処理する必要があるものです。そして、これはエラーを発生させる機能である:

@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) 

が、これは正確なエラーです:これは今

+0

デバッグヘルプ(「なぜこのコードは機能していませんか?」)には、目的の動作、特定の問題またはエラー、および質問自体に再現するのに必要な最短コードが含まれている必要があります。明確な問題文がない質問は、他の読者にとって有用ではありません。参照:最小、完全、および検証可能な例を作成する方法。 –

+2

StringProperty *は文字列であり、それを反復処理できます。問題がある場合は、実際のコードとエラーを投稿する必要があります。 –

+0

[これを知る唯一の人物であるため、**解説** **特定の問題またはエラーと**再現に必要な**最短コード**(http://stackoverflow.com/help/mcve)を参照してください。問題は、 'str'または' unicode'タイプなので、おそらくあなたの**コードは間違っています。 –

答えて

1

あなたはクラスメソッドとしてこれを宣言した、より明確である

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

希望。つまり、selfはゲームのインスタンスではなく、クラスそのものです。そのため、self.user_wordは、クラスで定義されているプロパティを参照し、インスタンス経由で使用できる文字列ではありません。

代わりに通常の@propertyデコレータを使用するか、そのまま標準の方法として使用してください。

+0

100万回ありがとう! –