2011-12-28 17 views
0

私はPythonにはかなり新しく、forループの動作に問題があります。私のコードでは、configobjを使ってファイルからconfigを読み込んでいます。 configファイルの内容は可変であり、それが問題を見ている場所です。リストの長さ= 1の場合の反復動作

if webconf.has_key(group): 
     scenario_list = webconf[group]['Scenarios']['names'] 

     for scenario in scenario_list: 

       print "Scenario name = %s\n" % scenario 

「scenario_list」変数の文字列の任意の数が含まれます。ここでは

は私のテストコードがあります。 '名前'に複数の要素がある場合は、「シナリオ」に各要素の値が設定されます。これは問題ありません。 "名前"に1要素しかない場合、ループは最初のエントリの各文字を繰り返し処理し、コードを破ります。

リストの長さが1の場合、 "scenario_list"のエントリの値を返すためにforループを取得するにはどうすればよいですか?

アドバイスはありがとうございます。

答えて

0

リストではなくタプルを使用していますか?

aTuple = (1,2,3) 
aList = [1,2,3] 

タプルとリストの大きな違いは、タプルは不変であり、リストは変更可能であるということです。つまり、リストを使用すると、リストの要素を変更したり、要素を追加したり削除したりすることができます。

あなたが遭遇する可能性が高い問題は、タプルアンパックと呼ばれる概念に関連しています。

aList = [0] # aList is now [0] 
notATuple = (0) # notATuple is now 0 
# there was exactly one element in the tuple, so it was unpacked in the variable 
aTuple = (0,) # aTuple is now (0,) - a tuple with one element 
# the comma indicates that you wish that the tuple should not be unpacked 

シナリオが1つしかないときは、シナリオの文字列をリストまたはタプルに入れないことが唯一の問題です。 Pythonは、リストのような文字列(タプルによく似ています)を文字として扱います。そのため、文字列を繰り返し処理すると、個々の文字(経験した動作)が得られます。したがって、文字列ではなく文字列を繰り返し処理する場合は、シナリオ文字列をリスト(またはタプル)に入れる必要があります。文字列を使用していないと、ランタイムエラーが発生していました。

+0

configobjオブジェクトの戻り値の型を見ると、項目に複数の要素がある場合はリストを返し、項目がある場合は文字列を返します。あなたは私がこのようなことをしなければならないと言っていますか?リストのシナリオ(scenario_list): "... – Yello

+0

私は今それを持っていると思います。 forループの宣言を「[scenario_list]のシナリオ」に変更することで、今私が望む振る舞いを得ることができます。私に正しい方法で考えさせてくれてありがとう。 – Yello

+0

ああ、私はあまりにも早く話しました!その宣言は、戻り値の型がリストの場合、複数の要素の動作を中断します。( – Yello

関連する問題