1

次のコードがあります。

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['Name'] == name:
                print record


def get_record(string):
    return dict(re.findall("^(.*): (.*)$", string, re.M))

これを使用してレコードを見つけようとすると、次の出力が得られます。

Enter name: Daniel Ghi
{'Home Phone No.': 'Example', 'Mobile Phone No.': 'Example', 'Name': 'Daniel Ghi
', 'Address': 'Example'}
Traceback (most recent call last):
  File "address.py", line 35, in <module>
    search_for_person(name)
  File "address.py", line 18, in search_for_person
    if record['Name'] == name:
KeyError: 'Name'

ご覧のとおり、これ実際には正しいデータを出力しますが、それでも KeyError が発生し、その理由はわかりません。誰でも私を啓発できますか?

4

1 に答える 1

4

正しいデータを出力し、実行を続け、後のデータで a を発生させKeyErrorます。

ほとんどの場合、ファイルは------文字列で終わるため、split最後に空の文字列を持つリストが生成され、空の辞書が生成されます。これには当然キーがありません。

簡単な修正は、data空の場合、または空白のみの場合、または空の場合はスキップすることrecordです。より堅牢な修正は、[]各 dict が実際に持っているキーがわからない場合に構文を使用しないことです。代わりに使用record.get('Name', None)します。

于 2013-10-23T20:54:52.670 に答える