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'))
})
大家好,
我正在尝试使用 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'))
})