2016-10-09 34 views
0

我已经在python 3.5上制作了一个程序,您可以找到链接到用户名的密码,为现有用户创建一个新密码,并向该用户添加一个新密码字典然后pickles它,所以每次我加载程序所有的用户名和密码将在那里。'AttributeError:'当我试图取出字典时

,来了的错误是你创建的咸菜文件,然后在第6行错误

AttributeError: Can't get attribute 'NewPass' on <module '__main__' (built-in)> 

发生(运行它的第一次后)。

这里是我的脚本:

import sys 
import pickle 
import os 

if os.path.exists("branston.p"): 
    LOGG = pickle.load(open('branston.p', 'rb')) 

else: 
    LOGG = {'Sam': ('CHRIST')} 

def Find(): 
    Username = input("Say a Username.") 
    print (LOGG[Username]) 

def NewPass(): 
    Username = Input("Enter your username.") 

    Newpass = input("Enter your new password") 

    if NewPass == input("Confirm password"): 
     LOGG[Username] = (NewPass) 

def NewEntry(): 

    NewUser = input("Enter your new username.") 
    Newpass = input("Enter your new password.") 

    LOGG[NewUser] = (NewPass) 

loop = True 

while loop == True: 

    function = input("Say what you want me to do.'Find', 'NewPass', 'NewEntry', 'Stop'.") 

    if function == ("Find"): 
     Find() 

    elif function == ("NewPass"): 
     NewPass() 

    elif function == ("NewEntry"): 
     NewEntry() 

    elif function == ("Stop"): 
     f = open('branston.p', 'wb') 
     pickle.dump(LOGG, f) 

     f.close() 
     sys.exit() 

任何帮助,将不胜感激。谢谢!

+3

Python区分大小写。 “Newpass”与“NewPass”不同。 – Kevin

+3

不要将您的变量命名为您的函数。它看起来像你腌一个功能。 – zvone

+0

请查看[PEP8](https://www.python.org/dev/peps/pep-0008/)。通过适当的命名约定,这个错字很容易被发现。 – MisterMiyagi

回答

2

当你做到这一点

LOGG[NewUser] = (NewPass) 

您分配功能NewPass你的字典项。您可能打算分配密码字符串,因此它应该是。

LOGG[NewUser] = Newpass 

注:括号是多余的。我还建议避免使用大写字母作为变量名的第一个字符,否则容易混淆变量名和函数名。

相关问题