为什么我一直收到此错误:TypeError:'bool'对象不可迭代?

时间:2016-01-10 00:38:48

标签: python

我正在制作一个文本冒险游戏,作为我的学习Python书籍的一部分...无论如何这是我想要做的:

def is_a_song(song):
    valid_sung_songs = ["song 1", "song 2", "song 3"]
    valid_unsung_songs = ["s1", "s2", "s3"]
    if song.lower() in valid_sung_songs:
        return (True, 0)
    elif song.lower() in valid_unsung_songs:
        return (True, 1)
    else:
        return False

def favorite_song():
    choice = raw_input("> ")
    is_song, has_sung = is_a_song(choice)

    if is_song and (has_sung == 0):
         print "Good Song"
    elif is_song and (has_sung == 1):
         print "Good Song, But I haven't sung it"
    else:
         print "Not a valid song"

favorite_song()

现在这只是我实际使用的代码的缩减版本,但是当它运行时,它可以在歌曲有效和唱歌时工作,当它有效且无效时,它会在最后一个else语句中崩溃:

else:
    print "Not a valid song"

错误:

TypeError: 'bool' object is not iterable

如果您想要我正在使用的实际代码,请访问:

1 个答案:

答案 0 :(得分:4)

您需要在此处返回False, False

def is_a_song(song):
    ...
    else:
        return False, False

您调用此函数并尝试解压缩两个值:

我建议您将代码更改为:

if song.lower() in valid_sung_songs:
    return True, False
elif song.lower() in valid_unsung_songs:
    return True, True
else:
    return False, False

后来这样做:

if is_song and not has_sung:
     print "Good Song"
elif is_song and has_sung:
     print "Good Song, But I haven't sung it"
else:
     print "Not a valid song"

对我来说似乎更清洁。

is_song, has_sung = is_a_song(choice)