Python为什么把我的列表当作元组?
我有一个叫做 step_segment 的列表。它绝对不应该是一个元组。
当我在我的 main 程序中按下“7”时,我得到了:
Traceback (most recent call last):
File "G:\programming\python\new_globals.py", line 205, in <module>
main()
File "G:\programming\python\new_globals.py", line 203, in main
pick_random(STATS, step_segment, seen, master)
File "G:\programming\python\new_globals.py", line 125, in pick_random
step_segment, STATS = take_step(step_segment, STATS)
File "G:\programming\python\new_globals.py", line 69, in take_step
step_segment.append(STATS)
AttributeError: 'tuple' object has no attribute 'append'
这个错误只在调用 pick_random() 的时候出现:
def pick_random(STATS, seen, master):
step_segment = []
#if len(seen) >= 256:
# return seen, master
while (len(step_segment)) < 128:
step_segment, STATS = take_step(step_segment, STATS)
if STATS[5] == "B": # when there's a battle:
randy = random.choice([0,1])
if randy == 1: # choose randomly between G and B
step_segment = do_fight(step_segment, STATS)
else:
step_segment = do_glitch(step_segment, STATS)
seen = seen + [STATS[0],STATS[5]]
#if step_segment not in master:
master.append(step_segment)
time = get_frames(step_segment)
print seen
print time
#return pick_random(STATS, seen, master)
return seen, master
完整代码在这里: http://pastebin.com/fZgqtxZn
相关问题:
1 个回答
4
do_flight() 返回一个包含两个元素的元组:
return step_segment, STATS
但是你没有正确地解包这个元组:
step_segment = do_fight(step_segment, STATS)
之后,step_segment 就变成了一个元组。
你可能是想写:
step_segment, STATS = do_fight(step_segment, STATS)
作为一般建议,你可能想保持你的方法签名一致,以避免这种错误,或者学习一些面向对象编程的知识,这样你就不需要到处传递相同的变量了。