このコードでは、家族のリストを繰り返し、18歳以上の男性を特定し、家族から削除し、自分の家族を始めようとしています。ループの最後にappendをコメントアウトすると、(家族の数を増やすことなく)うまく動作します。これは私が追記行う場合のようにそれが見えるものです:リストに追加すると、なぜforループが壊れるのですか? (Python)
Ticking Disan
There were 5 members of family Evnes
Now there are 4 members of family Evnes
Gregor needs a wife
There were 6 families
Now there are 7 families
There were 7 members of family Bhworth
Now there are 6 members of family Bhworth
Ewan needs a wife
There were 7 families
Now there are 8 families
debugger.run(setup['file'], None, None)
File "C:\Users\Mark\Desktop\eclipse-SDK-3.7.2-win32\eclipse\plugins\org.python.pydev.debug_2.5.0.2012040618\pysrc\pydevd.py", line 1060, in run
pydev_imports.execfile(file, globals, locals) #execute the script
File "C:\Users\Mark\workspace\WorldPop\WorldPop.py", line 610, in <module>
main()
File "C:\Users\Mark\workspace\WorldPop\WorldPop.py", line 74, in main
done = menu()
File "C:\Users\Mark\workspace\WorldPop\WorldPop.py", line 77, in menu
genWorld()
File "C:\Users\Mark\workspace\WorldPop\WorldPop.py", line 116, in genWorld
dispWorld(oneWorld)
File "C:\Users\Mark\workspace\WorldPop\WorldPop.py", line 135, in dispWorld
displayTick(world)
File "C:\Users\Mark\workspace\WorldPop\WorldPop.py", line 317, in displayTick
calcMarriage(city)
File "C:\Users\Mark\workspace\WorldPop\WorldPop.py", line 359, in calcMarriage
for member in family.membersList:
TypeError: iteration over non-sequence
を、私は戻って最初にループサイクルのための新たなメンバーを検索するときに問題が来ることを認識し、私は、なぜ行って表示されていませんappendはループを壊しています。どんな洞察力も大変ありがとうございます。
エラーを突き止めるために行番号を入力することはできますか?死に至る最後のラインはどれですか? ipythonのようなものを使って、データ構造の状態を調べることができますか? – Ansari
まず、リストを反復してループ内から変更することは良い考えではないと思います。第二に、 'city.familyList.append(Family(member.lastName、member))'に新しい 'Family'を作成したときに' memberList'が何らかの理由で適切なリストではないと思われます。おそらく 'Family .__ init__'にバグがありますか? –
ああ、通常、familyListはクラスオブジェクトの配列ですが、新しく作成されたファミリは1要素配列のクラスオブジェクトではなくクラスオブジェクトを受け取るだけです。 - これが問題だった!ありがとうございました! – CromerMW