Python:ElementTree 中 NoneType 的解决方法

Python: Workaround for NoneType in ElementTree

大家好,

我正在尝试使用 ElementTree 加载一个 .xml 文件,代码如下:

data = []
    root = et.fromstring(r.content)
    user = root.findall('.//user')
    for u in user:
        data.append(
            {'id': u.get('id'),
             'firstName': u.find('firstName').text,
             'lastName': u.find('lastName').text,
             'personnelNumber': u.find('personnelNumber').text}
             )

我知道有几行 - 可能有六行 'personnelNumber' 是空的,所以我收到以下错误:

AttributeError: 'NoneType' object has no attribute 'text'

我想问一下是否有人知道这个问题的解决方法?老实说我不在乎少了几个条目,所以我只实现了剩下的!?

感谢您的帮助,祝周末愉快!

您不能无条件地访问某些可能 None.

的属性

u中没有名为xyz的子节点时,u.find('xyz')的结果将是None,所以u.find('xyz').text会失败。

使用辅助函数。

def get_text(elem, fallback_value=None):
    return elem.text if elem else fallback_value

data = []
root = et.fromstring(r.content)
for u in root.findall('.//user'):
    data.append({
        'id': u.get('id'),
        'firstName': get_text(u.find('firstName')),
        'lastName': get_text(u.find('lastName')),
        'personnelNumber': get_text(u.find('personnelNumber'))
    })