我有这段代码:
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是否为空以防止用户在没有加载文件的情况下执行操作?
答案 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)