2017-04-25 105 views
-1

我正在尝试编写一个“多用户”程序,该程序存储了在程序运行期间登录的每个用户的项目的商店列表。为此,我创建了一个名为login_to_user的函数,该函数基本上检查用户是否已经登录,如果没有,则在嵌套字典var user_database中创建一个新位置以存储其商店列表。python中的关键错误

def login_to_user(user_database): 
username = raw_input("Enter Your username: ") 
for username in user_database.keys(): 
    if(username in user_database): 
     shop_list = user_database[username]["shop_list"] 
else: 
    user_database[username]["shop_list"] = 0 #gives place to new user in dictionary 
    shop_list = user_database[username]["shop_list"] 
    shop_list = get_list_from_user() 
    shop_list = organize_list(shop_list) 

但之后我尝试运行一个程序,并输入一个测试用户,我总是会得到以下错误:

Traceback (most recent call last): 
    File "Shopping-MichaelEX4.py", line 170, in <module> 
    main() 
    File "Shopping-MichaelEX4.py", line 164, in main 
    login_to_user(user_database) 
    File "Shopping-MichaelEX4.py", line 156, in login_to_user 
    user_database[username]["shop_list"] = 0 #gives place to new user in 
    dictionary 
    KeyError: 'test' 

我读到了关键错误,并没有找到一个解决我的问题。我尝试以不同的方式初始化嵌套字典。迄今为止,没有任何工作。

我真的很感谢任何解决我的问题。谢谢!

+0

什么是'user_database'?并请修复您的格式。 – pingul

+0

user_database是一个嵌套词典,它按用户名存储所有保存的商店列表。 – MichaelFel123

回答

1

当您尝试执行user_database[username]["shop_list"] = 0时,字典无法在user_database中找到username,因此发生错误。

因此,首先在user_database创建username关键,就像在下面的解决方案中提到:

def login_to_user(user_database): 
     username = raw_input("Enter Your username: ") 
     for username in user_database.keys(): 
      if(username in user_database): 
       shop_list = user_database[username]["shop_list"] 
      else: 
       user_database[username] = {} # Create username in user_database 
       user_database[username]["shop_list"] = 0 #gives place to new user in dictionary 
       shop_list = user_database[username]["shop_list"] 
       shop_list = get_list_from_user() 
       shop_list = organize_list(shop_list) 
+0

非常感谢你! – MichaelFel123

0

你不能设置属性的新用户的“shop_list”因为你没有告诉你的是dictionnary他们是一个新用户。 你else语句应该这样开始:

else: 
    user_database[username] = {} # initialize your new user 
    user_database[username]["shop_list"] = 0 # then you can initialize the user's shopping list. 

希望它可以帮助