코드 : 기본적으로KeyError를 파일에 DICT를 작성하려고 [파이썬]
import re
def add_details(details_dict, file_mode):
with open("address.txt", file_mode) as book:
book.write("Name: {}\n".format(details_dict['Name']))
book.write("Address: {}\n".format(details_dict['Address']))
book.write("Home Phone No.: {}\n".format(details_dict['Home Phone No.']))
book.write("Mobile Phone No.: {}".format(details_dict['Mobile Phone No.']))
book.write("\n---------------\n")
def delete_person(name):
with open("address.txt", "r+") as book:
records = re.split("[-]+", book.read(), re.M)
for data in records:
record = get_record(data)
if record.get('Name', None) != name:
add_details(record, "w")
def get_record(string):
return dict(re.findall("^(.*): (.*)$", string, re.M))
def print_record(record):
print "\n"
print "Name: {}".format(record['Name'])
print "Address: {}".format(record['Address'])
print "Home Phone No.: {}".format(record['Home Phone No.'])
print "Mobile Phone No.: {}".format(record['Mobile Phone No.'])
def search_for_person(name):
with open("address.txt", "r") as book:
records = re.split("[-]+", book.read(), re.M)
for data in records:
record = get_record(data)
if record.get('Name', None) == name:
print_record(record)
choice = raw_input("Add a new person (1), delete a person(2), or search for a person(3)?\n")
if choice == "1":
details = {'Name':"", 'Address':"", 'Home Phone No.':"", 'Mobile Phone No.':""}
details['Name'] = raw_input("Enter name of contact: ")
details['Address'] = raw_input("Enter address of contact: ")
details['Home Phone No.'] = raw_input("Enter Home Telephone No. of contact: ")
details['Mobile Phone No.'] = raw_input("Enter Mobile Telephone No. of contact: ")
add_details(details, "a")
elif choice == "2":
name = raw_input("Enter name to delete: ")
delete_person(name)
elif choice == "3":
name = raw_input("Enter name: ")
print search_for_person(name)
, 나는 시도하고 delete_person() 메소드를 사용하여, 사람을 삭제할 때마다,이 역 추적 얻을 :
Traceback (most recent call last):
File "address.py", line 56, in <module>
delete_person(name)
File "address.py", line 19, in delete_person
add_details(record, "w")
File "address.py", line 6, in add_details
book.write("Name: {}\n".format(details_dict['Name']))
KeyError: 'Name'
을
그러나 을 제외한 모든 것이 정상적으로 작동합니다. 나는 똑같은 방법으로 사전을 세운 것을 고려해 볼 때, 나는 오류를 범해서는 안된다. 그러나 나는 어쨌든이다. 이것에 대한 도움이 필요하십니까? 필요한 경우 파일의 레이아웃은 다음과 같습니다.
Name: test
Address: testaddress
Home Phone No.: 2313123121233
Mobile Phone No.: 423423423432
---------------
Name: test2
Address: testaddress2
Home Phone No.: 342353454345
Mobile Phone No.: 231231391
---------------
'은'KeyError'를 발생 직전 선 어떤 모습 details_dict'입니까? – Blender