Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.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
如何在Python3中编写以下情况下的异常?_Python_Exception Handling - Fatal编程技术网

如何在Python3中编写以下情况下的异常?

如何在Python3中编写以下情况下的异常?,python,exception-handling,Python,Exception Handling,我需要修改一个python代码(由程序员给出),我想将其用于我的系谱项目。我对python非常陌生,开始能够阅读代码。然而,我不知道如何解决以下问题 我在执行代码时收到以下错误消息: self['gebort'] += ", Taufe: %s" % place.get_title() KeyError: 'gebort' 问题是,对于我数据库中的一个人来说,只有洗礼日期(这里是Taufe)是已知的,而不是出生日期。这就是代码失败的原因 这是代码基础的相关片段: birth_ref = per

我需要修改一个python代码(由程序员给出),我想将其用于我的系谱项目。我对python非常陌生,开始能够阅读代码。然而,我不知道如何解决以下问题

我在执行代码时收到以下错误消息:

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()
现在,我不知道在找不到出生日期/地点时添加异常处理,以便代码不会给出任何出生值。有人能给我指出正确的方向吗?

而不是:

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

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

正如前面所写的,给某物命名self并不聪明,或者上面的代码是从dict派生的类中得到的?使用.get可以定义在没有该名称的键的情况下返回的内容,例如空字符串。

您研究过Python中的异常处理吗?看看吧,如果只是一个字典键错误,我认为您不需要这样做。您可以使用
dict.get
dict.setdefault
执行某些操作。此外,我不会在Python中将变量命名为“self”,除非它是实例方法的第一个参数,“self”通常用于引用封闭的对象实例。在带有
位置的行周围放置一个
try/except KeyError
。get_title()
调用并在错误发生时处理。@Shashank和mstuebner,我不知道为什么给我代码的程序员在无数次的场合把他的变量命名为“self”。谢谢你,mstuebner。你给了我正确的暗示!最后,我必须编写
self['gebort']=self.get('gebort','')+,Taufe:%s”%place.get_title()
,代码才能正常运行。否则,它会给我一条错误消息,比如
dictname not defined
等等。