2015-05-10 119 views
1

我需要修改一個我想用於我的族譜項目的Python代碼(由程序員給出)。我對Python非常陌生,並開始閱讀代碼。但是,我不知道如何解決以下問題。如何在Python3的下列情況下編寫一個異常?

我執行代碼時收到以下錯誤信息:

self['gebort'] += ", Taufe: %s" % place.get_title() 
KeyError: 'gebort' 

的問題是,在我的數據庫中的人只有洗禮之日起的一個(在這裏:Taufe)是已知的,但不是日期出生。這是代碼失敗。

這是代碼基礎上的相關片段:

birth_ref = person.get_birth_ref() 
if birth_ref: 
    birth = database.get_event_from_handle(birth_ref.ref) 

    self['gjahr'] = birth.get_date_object().get_year() 

    if self['gjahr'] >= 1990: 
     self['mindj'] = True 

    self['gebdat'] = dd.display(birth.get_date_object()) 
    self['plaingebdat'] = self['gebdat'] 
    place_handle = birth.get_place_handle() 
    self['geborthandle'] = place_handle 
    place = database.get_place_from_handle(place_handle) 
    if place: 
     self['gebort'] = place.get_title() 
     self['plaingebort'] = self['gebort'] 

    for eventref in person.get_event_ref_list(): 
     event = database.get_event_from_handle(eventref.ref) 
     if event.get_type() in (gramps.gen.lib.EventType.CHRISTEN, gramps.gen.lib.EventType.BAPTISM): 
      self['gebdat'] += ", Taufe: %s" % dd.display(event.get_date_object()) 

      place_handle = event.get_place_handle() 
      place = database.get_place_from_handle(place_handle) 
      if place: 
       self['gebort'] += ", Taufe: %s" % place.get_title() 

現在,我不知道什麼時候就沒有出生日期添加一個異常處理/場所內被發現,這樣的代碼不會給任何出生值。有人能夠指出我正確的方向嗎?

+0

你是否研究過Python *中的異常處理?* – jonrsharpe

+0

看看https://docs.python.org/3.4/tutorial/errors.html – Joost

+3

我不認爲你需要這樣做,如果它只是一個字典關鍵錯誤。你可以用'dict.get'或'dict.setdefault'做一些事情。另外,我不會在Python中爲我的變量命名爲「self」,除非它是實例方法的第一個參數,「self」通常用於引用封閉對象實例。 – Shashank

回答

2

相反的:

dict_name['gebort'] += ", Taufe: %s" % place.get_title() 

你可以寫

dict_name['gebort'] = dict_name.get('gebort', '') + ", Taufe: %s" % place.get_title() 

正如已經寫好,命名自己的東西是不聰明,或者是上面的代碼從字典派生的類?使用.get,你可以定義什麼是返回的情況下,如果沒有該名稱的關鍵,在檢查一個空字符串。

+0

謝謝,mstuebner。你給了我正確的提示!最後,我必須編寫'self ['gebort'] = self.get('gebort','')+「,Taufe:%s」%place.get_title()'以使代碼正常工作。否則,它會給我一個錯誤信息,比如'dictname not defined'等等。 –

相關問題