' AttributeError的:'当我尝试unpickle字典

时间:2016-10-09 21:49:32

标签: python python-3.x dictionary pickle

我在python 3.5上创建了一个程序,你可以找到链接到用户名的密码,为现有用户创建一个新密码,然后在字典中添加一个新的用户和密码,然后每次加载程序所有用户名和密码都在那里。

出现的错误是在您创建pickle文件(第一次运行它之后)然后在第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()

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

1 个答案:

答案 0 :(得分:2)

当你这样做时

LOGG[NewUser] = (NewPass)

您正在为函数条目NewPass分配函数。您可能打算分配密码字符串,因此它应该是。

LOGG[NewUser] = Newpass

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