检查列表是否为空

时间:2015-04-10 23:35:34

标签: python list

我有这段代码:

while(active == True):

    print("\n*** Movie Title Explorer ***\n \tl - load file of movie titles\n \tr - random movie\n \ts - search\n \t"
          + "sw - starts with\n \tk - keep - save the last displayed movie title to your favourites\n \t"
          + "f - favourites display\n \tc - clear favourites\n \tq - quit") 

    command = input("Enter a command: ")


    if(command == "l"):
        movieList = loadMovie()

    elif(command == "r"):

        randomMovie(movieList)

    elif(command == "s"):
        searchMovies(movieList)

    elif(command == "sw"):
        startsWithSearch(movieList)

这些功能中的每一个都能正常工作。我想要做的是检查每个elif块中movieList是否为空。这意味着除非已将文件加载到movieList中,否则用户无法执行操作(例如随机和搜索)。 我尝试过使用:

if movieList == []:
    print("Load file first")

assert(movieList == []), "Load file first"

但是,我一直收到这个错误:本地变量' movieList'在分配之前引用。 如何检查movieList是否为空以防止用户在没有加载文件的情况下执行操作?

3 个答案:

答案 0 :(得分:0)

你需要把

movieList=[]

以上检查

if movieList == []:
    print("Load file first")

因为听起来你假设movieList在检查之前获得了分配。但是,如果在检查之前未分配它,则会抛出“在赋值之前引用”错误。

答案 1 :(得分:0)

因为您在第一个if块(命令==" l")内部分配了movielist,所以它不会被创建并分配到任何elif块中,这就是为什么你的错误说它在分配之前被引用了。如果命令是" r"," s"等等,它就不会存在。

您可以通过添加以下行来解决此问题:

    movieList = []

    while(active == True):
      #etc

并且它将在每个循环中处于范围内。

作为一般原则,当您编写这种基于循环的交互式菜单时,您应该在首次进入循环之前初始化所需的所有内容。

答案 2 :(得分:0)

在主程序段外设置movieList。此外,某些东西需要将活动切换为False以打破循环。

movieList = None
active = True
while(active):

    print("\n*** Movie Title Explorer ***\n \tl - load file of movie titles\n \tr - random movie\n \ts - search\n \t"
          + "sw - starts with\n \tk - keep - save the last displayed movie title to your favourites\n \t"
          + "f - favourites display\n \tc - clear favourites\n \tq - quit") 

    command = input("Enter a command: ")


    if(command == "l"):
        movieList = loadMovie()

    elif(command == "r"):
        if movieList:
            randomMovie(movieList)

    elif(command == "s"):
        if movieList:
            searchMovies(movieList)

    elif(command == "sw"):
        if movieList:
           startsWithSearch(movieList)