Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python EOFError:输入错误消息不足_Python_Function_Dictionary - Fatal编程技术网

Python EOFError:输入错误消息不足

Python EOFError:输入错误消息不足,python,function,dictionary,Python,Function,Dictionary,我一直在努力使这本词典在Python中工作,但我失败得很惨。我已经找到了一些类似的解决方案,但我无法让它们发挥作用。我很确定这与我调用函数的方式有关。我试着把每一部分都放到一个单独的函数中,但失败了。我仍然收到以下错误消息: employee\u dictionary=pickle.load(文件) EOFError:输入不足 这是我的密码: import pickle import os.path def main(): employee_dictionary = {} i

我一直在努力使这本词典在Python中工作,但我失败得很惨。我已经找到了一些类似的解决方案,但我无法让它们发挥作用。我很确定这与我调用函数的方式有关。我试着把每一部分都放到一个单独的函数中,但失败了。我仍然收到以下错误消息:

employee\u dictionary=pickle.load(文件)

EOFError:输入不足

这是我的密码:

import pickle
import os.path

def main():
    employee_dictionary = {}

    if os.path.exists("employee.dat"):
        file = open("employee.dat","rb")
        employee_dictionary = pickle.load(file)
        file.close()

    else:
        emp1 = Employee("Susan Myers", 47899, "Accounting", "Vice President")
        emp2 = Employee("Mark Jones", 39119, "IT", "Programmer")
        emp3 = Employee("Joy Rogers", 81774, "Manufacturing", "Engineer")

        employee_dictionary = {emp1.get_ID_number(): emp1.get_name()+ '' + emp1.get_dept()+ '' + emp1.get_job_title(),\
                               emp2.get_ID_number(): emp2.get_name()+ '' + emp2.get_dept()+ '' + emp2.get_job_title(),\
                               emp3.get_ID_number(): emp3.get_name()+ '' + emp3.get_dept()+ '' + emp3.get_job_title()}

        return employee_dictionary

employee_dictionary = main()

choice = 'y'
while choice.upper()== 'Y':
    print("Make a selection from the following actions:")
    print("Lookup an employee in the dictionary: 1")
    print("Add a new employee to the dictionary: 2")
    print("Change an existing employee's name, department, and job title in the dictionary: 3")
    print("Delete an employee from the dictionary: 4")
    print("Quit the program: 5")
    selection = input("Make your selection: ")

    if int(selection) == 1:
        id_number = input("What is the employee's ID number?")

        if int(id_number) in employee_dictionary.keys():
            print(employee_dictionary[int(id_number)])

        else:
            print("The employee does not exist.")

    else:
        if int(selection) == 2:
            id_number = input("What is the employee's ID number?")

            if int(id_number) in employee_dictionary.keys():
                print('That employee already exists.')

            else:
                name = input("Enter the name of the employee:")
                dept = input("Enter the department of the employee:")
                title = input("Enter the job title of the employee:")
                emp4 = Employee(name,int(id_number), dept, title)
                employee_dictionary[emp4.get_ID_number()]= emp1.get_name()+ '' + emp4.get_dept()+ '' + emp4.get_job_title()

                print("The employee was added.")

        else:
            if int(selection) == 3:
                id_number = input("What is the employee's ID number?")

                if int(id_number) in employee_dictionary.keys():
                    name = input("Enter the name of the employee:")
                    dept = input("Enter the department of the employee:")
                    title = input("Enter the job title of the employee:")
                    emp4 = Employee(name,int(id_number), dept, title)
                    employee_dictionary[emp4.get_ID_number()]= emp1.get_name()+ '' + emp4.get_dept()+ '' + emp4.get_job_title()

                    print("The employee record has been updated.")

                else:
                    print("Record not found.")

            else:
                if int(selection) == 4:
                    id_number = input("What is the employee's ID number?")
                    print("Deleted: ", employee_dictionary.pop(int(id_number),"Record not found."))

                else:
                    if int(selection)!=5:
                        print("")

choice = input("Do you want to make another selection (y or n)?")
file = open('employee.dat','wb')
pickle.dump(employee_dictionary,file)
file.close()
以下是原始的Employee类:

class Employee:
    def __init__(self, name, ID_number, dept, job_title):
        self.__name = name
        self.__ID_number = ID_number
        self.__dept = dept
        self.__job_title = job_title

    #set methods
    def set_name(self,name):
        self.__name = name
    def set_ID_number(self,ID_number):
        self.__ID_number = ID_number
    def set_dept(self,dept):
        self.__dept = dept
    def set_job_title(self,job_title):
        self.__job_title = job_title


    #get methods    
    def get_name(self):
        return self.__name
    def get_ID_number(self):
        return self.__ID_number
    def get_dept(self):
        return self.__dept
    def get_job_title(self):
        return self.__job_title

def main():

    emp1 = Employee("Susan Myers", 47899, "Accounting", "Vice President")
    emp2 = Employee("Mark Jones", 39119, "IT", "Programmer")
    emp3 = Employee("Joy Rogers", 81774, "Manufacturing", "Engineer")

    #A bunch of print statements go here

main()

面向未来用户。我想出了一个解决办法。以下是我得到的:

import os.path
import pickle

class Employee:
    def __init__(self, name, ID_number, dept, job_title):
        self.__name = name
        self.__ID_number = ID_number
        self.__dept = dept
        self.__job_title = job_title

    #set methods
    def set_name(self,name):
        self.__name = name
    def set_ID_number(self,ID_number):
        self.__ID_number = ID_number
    def set_dept(self,dept):
        self.__dept = dept
    def set_job_title(self,job_title):
        self.__job_title = job_title


    #get methods    
    def get_name(self):
        return self.__name
    def get_ID_number(self):
        return self.__ID_number
    def get_dept(self):
        return self.__dept
    def get_job_title(self):
        return self.__job_title

def main():
    employee_dictionary = {}

    if os.path.exists("employee.dat"):
        file = open("employee.dat","rb")
        employee_dictionary = pickle.load(file)
        file.close()

    else:
        emp1 = Employee("Susan Myers", 47899, " Accounting", " Vice President")
        emp2 = Employee("Mark Jones", 39119, " IT", " Programmer")
        emp3 = Employee("Joy Rogers", 81774, " Manufacturing", " Engineer")

        employee_dictionary = {emp1.get_ID_number(): emp1.get_name()+ ',' + emp1.get_dept()+ ',' + emp1.get_job_title(),\
                               emp2.get_ID_number(): emp2.get_name()+ ',' + emp2.get_dept()+ ',' + emp2.get_job_title(),\
                               emp3.get_ID_number(): emp3.get_name()+ ',' + emp3.get_dept()+ ',' + emp3.get_job_title()}

        return employee_dictionary

employee_dictionary = main()

choice = 'y'
while choice.upper()== 'Y':
    print("Make a selection from the following actions:")
    print("Lookup an employee in the dictionary: 1")
    print("Add a new employee to the dictionary: 2")
    print("Change an existing employee's name, department, and job title in the dictionary: 3")
    print("Delete an employee from the dictionary: 4")
    print("Quit the program: 5\n")
    selection = input("Make your selection: ")
    print("\n")

    if int(selection) == 1:
        id_number = input("What is the employee's ID number?")

        if int(id_number) in employee_dictionary.keys():
            print("\nThe employee is:",employee_dictionary[int(id_number)],"\n")

        else:
            print("\nThe employee does not exist.\n")

    else:
        if int(selection) == 2:
            id_number = input("What is the employee's ID number?")

            if int(id_number) in employee_dictionary.keys():
                print('That employee already exists.\n')

            else:
                name = input("Enter the name of the employee:")
                dept = input("Enter the department of the employee:")
                title = input("Enter the job title of the employee:")
                emp4 = Employee(name,int(id_number), dept, title)
                employee_dictionary[emp4.get_ID_number()]= emp4.get_name()+ ', ' + emp4.get_dept()+ ', ' + emp4.get_job_title()

                print("\nThe employee was added.\n")

        else:
            if int(selection) == 3:
                id_number = input("What is the employee's ID number?")

                if int(id_number) in employee_dictionary.keys():
                    name = input("Enter the name of the employee:")
                    dept = input("Enter the department of the employee:")
                    title = input("Enter the job title of the employee:")
                    emp4 = Employee(name,int(id_number), dept, title)
                    employee_dictionary[emp4.get_ID_number()]= emp4.get_name()+ ', ' + emp4.get_dept()+ ', ' + emp4.get_job_title()

                    print("\nThe employee record has been updated.\n")

                else:
                    print("\nRecord not found.\n")

            else:
                if int(selection) == 4:
                    id_number = input("What is the employee's ID number?")
                    print("\nDeleted: ", employee_dictionary.pop(int(id_number),"Record not found."))
                    print("\n")

                else:
                    if int(selection)!=5:
                        print("")
                    break

choice = input("Do you want to make another selection (y or n)?")
file = open('employee.dat','wb')
pickle.dump(employee_dictionary,file)
file.close()

面向未来用户。我想出了一个解决办法。以下是我得到的:

import os.path
import pickle

class Employee:
    def __init__(self, name, ID_number, dept, job_title):
        self.__name = name
        self.__ID_number = ID_number
        self.__dept = dept
        self.__job_title = job_title

    #set methods
    def set_name(self,name):
        self.__name = name
    def set_ID_number(self,ID_number):
        self.__ID_number = ID_number
    def set_dept(self,dept):
        self.__dept = dept
    def set_job_title(self,job_title):
        self.__job_title = job_title


    #get methods    
    def get_name(self):
        return self.__name
    def get_ID_number(self):
        return self.__ID_number
    def get_dept(self):
        return self.__dept
    def get_job_title(self):
        return self.__job_title

def main():
    employee_dictionary = {}

    if os.path.exists("employee.dat"):
        file = open("employee.dat","rb")
        employee_dictionary = pickle.load(file)
        file.close()

    else:
        emp1 = Employee("Susan Myers", 47899, " Accounting", " Vice President")
        emp2 = Employee("Mark Jones", 39119, " IT", " Programmer")
        emp3 = Employee("Joy Rogers", 81774, " Manufacturing", " Engineer")

        employee_dictionary = {emp1.get_ID_number(): emp1.get_name()+ ',' + emp1.get_dept()+ ',' + emp1.get_job_title(),\
                               emp2.get_ID_number(): emp2.get_name()+ ',' + emp2.get_dept()+ ',' + emp2.get_job_title(),\
                               emp3.get_ID_number(): emp3.get_name()+ ',' + emp3.get_dept()+ ',' + emp3.get_job_title()}

        return employee_dictionary

employee_dictionary = main()

choice = 'y'
while choice.upper()== 'Y':
    print("Make a selection from the following actions:")
    print("Lookup an employee in the dictionary: 1")
    print("Add a new employee to the dictionary: 2")
    print("Change an existing employee's name, department, and job title in the dictionary: 3")
    print("Delete an employee from the dictionary: 4")
    print("Quit the program: 5\n")
    selection = input("Make your selection: ")
    print("\n")

    if int(selection) == 1:
        id_number = input("What is the employee's ID number?")

        if int(id_number) in employee_dictionary.keys():
            print("\nThe employee is:",employee_dictionary[int(id_number)],"\n")

        else:
            print("\nThe employee does not exist.\n")

    else:
        if int(selection) == 2:
            id_number = input("What is the employee's ID number?")

            if int(id_number) in employee_dictionary.keys():
                print('That employee already exists.\n')

            else:
                name = input("Enter the name of the employee:")
                dept = input("Enter the department of the employee:")
                title = input("Enter the job title of the employee:")
                emp4 = Employee(name,int(id_number), dept, title)
                employee_dictionary[emp4.get_ID_number()]= emp4.get_name()+ ', ' + emp4.get_dept()+ ', ' + emp4.get_job_title()

                print("\nThe employee was added.\n")

        else:
            if int(selection) == 3:
                id_number = input("What is the employee's ID number?")

                if int(id_number) in employee_dictionary.keys():
                    name = input("Enter the name of the employee:")
                    dept = input("Enter the department of the employee:")
                    title = input("Enter the job title of the employee:")
                    emp4 = Employee(name,int(id_number), dept, title)
                    employee_dictionary[emp4.get_ID_number()]= emp4.get_name()+ ', ' + emp4.get_dept()+ ', ' + emp4.get_job_title()

                    print("\nThe employee record has been updated.\n")

                else:
                    print("\nRecord not found.\n")

            else:
                if int(selection) == 4:
                    id_number = input("What is the employee's ID number?")
                    print("\nDeleted: ", employee_dictionary.pop(int(id_number),"Record not found."))
                    print("\n")

                else:
                    if int(selection)!=5:
                        print("")
                    break

choice = input("Do you want to make another selection (y or n)?")
file = open('employee.dat','wb')
pickle.dump(employee_dictionary,file)
file.close()

目录中是否有空的
employee.dat
?。假设先前的一次运行崩溃并留下一个空文件。下一次你会发现这个错误。因此,部分问题在于如何处理损坏的.dat文件。您可以捕获异常,删除文件,然后执行else子句中的操作。为此,您需要重新构造代码。
file=open('employee.dat','wb')
有点风险。假设转储中出现问题,您得到一个空的或损坏的文件?您可以将其保存为其他名称,并在知道其已关闭时覆盖旧的.dat。问题不在于代码本身,而在于文件中的数据。自从文件最初被pickle以来,它是否已被修改或损坏?您使用的Python版本是否与最初对文件进行pickle的版本相同?默认字符编码(您正在使用的)是否与最初对文件进行pickle的编码相同?最初的pickle操作是否在未被识别的情况下部分失败(即文件已损坏/不完整)?@tdelaney我将是第一个承认我的python编码能力不太令人钦佩的人,因此我不确定它在哪里损坏或如何处理损坏的.dat。我发布了我认为函数应该从中调用的原始employee类。当我尝试删除employee.dat文件并再次运行它时,我得到一个NameError:未定义名称“employee”。它甚至不重新创建.dat文件。目录中是否有空的
employee.dat
?。假设先前的一次运行崩溃并留下一个空文件。下一次你会发现这个错误。因此,部分问题在于如何处理损坏的.dat文件。您可以捕获异常,删除文件,然后执行else子句中的操作。为此,您需要重新构造代码。
file=open('employee.dat','wb')
有点风险。假设转储中出现问题,您得到一个空的或损坏的文件?您可以将其保存为其他名称,并在知道其已关闭时覆盖旧的.dat。问题不在于代码本身,而在于文件中的数据。自从文件最初被pickle以来,它是否已被修改或损坏?您使用的Python版本是否与最初对文件进行pickle的版本相同?默认字符编码(您正在使用的)是否与最初对文件进行pickle的编码相同?最初的pickle操作是否在未被识别的情况下部分失败(即文件已损坏/不完整)?@tdelaney我将是第一个承认我的python编码能力不太令人钦佩的人,因此我不确定它在哪里损坏或如何处理损坏的.dat。我发布了我认为函数应该从中调用的原始employee类。当我尝试删除employee.dat文件并再次运行它时,我得到一个NameError:未定义名称“employee”。它甚至不会重新创建.dat文件。请以后再添加一点上下文。例如:原始代码有什么问题?为什么您的解决方案很好?谢谢,请你以后再加一点背景。例如:原始代码有什么问题?为什么您的解决方案很好?谢谢