在Django中创建对象期间尝试catch参数

时间:2013-10-15 21:04:22

标签: python django django-models django-orm

我有以下代码,我从linkedin api

获取并解析数据
Experience.objects.get_or_create(user=User.objects.get(id=request.user.id),
                          company=company,
                          title=i.find('title').text,
                          start_month=i.find('start-date').find('month').text,
                          start_year=i.find('start-date').find('year').text,
                          end_month=i.find('end-date').find('month').text,
                          end_year=i.find('end-year').find('year').text,
                          description=i.find('summary').text)

但是,在end和我的数据库中,end_month和end_year等日期值不是必需的。但是,当我使用代码时,它说

  

'NoneType'对象没有属性'find'

因为position在xml中没有start_month。

所以我应该检查一下我是否可以从xml获得end_month或end_year,如果没有,我将使用null end_year创建对象。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

是的,如果它们不存在于linkedin的数据中,则将值设置为None,例如

if i.find('end-date')
    end_month = i.find('end-date').find('month').text
else:
    end_month = None

if i.find('end-year'):
    end_year = i.find('end-year').find('year').text
else:
    end_year = None

Experience.objects.get_or_create(
    user=User.objects.get(id=request.user.id),
    company=company,
    title=i.find('title').text,
    start_month=i.find('start-date').find('month').text,
    start_year=i.find('start-date').find('year').text,
    end_month=end_month,
    end_year=end_year,
    description=i.find('summary').text)

linkedin是否为其数据提供唯一ID?如果是这样,您应该将其存储在数据库中并使用它来识别Experience对象 - 否则,如果某些内容发生变化,您最终会在数据库中出现重复项。

答案 1 :(得分:0)

是的,如果你想避免尝试,你可以这样做:

Experience.objects.get_or_create(
    user=User.objects.get(id=request.user.id),
    company=company,
    title=i.find('title').text,
    start_month=i.find('start-date').find('month').text,
    start_year=i.find('start-date').find('year').text,
    end_month=i.find('end-date') and i.find('end-date').find('month').text,
    end_year=i.find('end-year') and i.find('end-year').find('year').text,
    description=i.find('summary').text
)

注意

i.find('end-date') and i.find('end-date').find('month').text

将返回

i.find('end-date').find('month').text 

如果

i.find('end-date') 

不是无。

我认为这符合您的需求。