-1

我有以下代码,我从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_month 和 end_year 这样的日期值在linkedin和我的数据库中都不是强制性的。但是当我使用它说的代码时

“NoneType”对象没有“查找”属性

因为 position 在 xml 中没有 start_month。

所以我应该检查是否可以从 xml 获取 end_month 或 end_year,如果不能,我将创建带有 null end_year 的对象。

有任何想法吗?

4

2 回答 2

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') 

不是无。

我认为这符合您的需求。

于 2013-10-15T22:35:15.137 回答
0

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

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对象 - 否则,如果在它们的末尾发生某些变化,您最终会在数据库中出现重复项。

于 2013-10-15T21:31:23.180 回答