1
私はこの辞書をPythonで動作させようとしていますが、私は悲惨に失敗しました。私は同様のSOのいくつかのソリューションを見つけましたが、私はそれらを動作させることはできません。私はそれが関数を呼び出す方法と何か関係があると確信しています。私は個々の機能を別々の機能に入れてみましたが失敗しました。私はまだ、次のエラーメッセージを取得しています:ここで Python 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()
は、元従業員クラスです:将来のユーザーのために
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()
ディレクトリに空の 'employee.dat'がありますか?以前の実行がクラッシュし、空のファイルを残したとします。次回はこのエラーが発生します。したがって、部分的には、破損した.datファイルをどのように扱いたいかという問題です。あなたは、例外をキャッチし、ファイルを削除してから、else節にあるものを実行することができます。あなたはそれのために少しコードを再構成する必要があります。 – tdelaney
'file = open( 'employee.dat'、 'wb')'は少し危険です。ダンプで何かがうまくいかず、空のファイルや破損したファイルがあるとします。あなたはそれが閉じられたことを知っているときに別の名前に保存し、古い.datを上書きすることができます。 – tdelaney
問題はあなたのコード*ではなく、ファイル内のデータにあります。ファイルが最初に漬け込まれてから変更または破損していますか?ファイルが最初にピクルされたバージョンと同じものを使用しているPythonのバージョンですか?既定の文字エンコード(使用している)は、ファイルが最初にピックされたエンコードと同じですか?事実を認識することなく、元のピックル操作が途切れてしまったか(すなわち、ファイルが壊れている/不完全で始まっていた)か? – Travis