【发布时间】:2021-09-01 07:16:20
【问题描述】:
我尝试从 xml 标签中提取数据,我的代码在变量 'ref' 级别显示错误,但它已初始化,我想获取具有相同 id 的行中每个标签的源。
我在循环之前添加了 'ref = (None, None)' 但我得到了 为什么 ref 经常出错?
if index not in self.sources:
TypeError: argument of type 'NoneType' is not iterable
SOURCES_REFS = []
SOURCES_DUPS = [ 0 ]
class Note(object):
OLDS = { 'UNIQUE_KEY': 'key', 'CREATE_DATE': 'create_date', 'NOM': 'nom_note', 'AUTEUR' : 'auteur', 'SRC' : 'sources',}
FIELDS = list(OLDS.values())
TAG = 'NOTE'
def __init__(self, separator=';'):
self.separator = separator
正是在这个层面我有问题
def start(self, e):
if e.tag in self.OLDS.keys():
attr = self.OLDS[e.tag]
value = e.text.strip() if e.text else e.text
if ( attr == 'create_date' or attr == 'modify_date' ):
value = format_date(e.get('display'))
elif attr == 'nom_note' or\
attr == 'auteur':
value = '|'.join(value.split('_RS_'))
#loop arround sources whatever a number...
elif attr == 'sources':
value = None
#ref = {'source': None, 'reference': None }
ref = (None, None)
for child in e.iterdescendants():
if child.tag == 'SRC_MOT':
# UNIQUE_KEY
ref = (child.text, ref[1])
print(ref)
elif child.tag == 'S_REF':
refs = child.text.split(';')
for part in refs:
# remove surrounding spaces (trim)
r = part.strip()
# merge multiple spaces into one
r = ' '.join(r.split())
self.add_source_reference((ref[0], r))
setattr(self, attr, value)
return None
def end(self, e):
if e.tag == self.TAG:
values = []
for attr in self.FIELDS:
value = getattr(self, attr, '') or ''
values.append(value)
csv = self.separator.join('"{0}"'.format(w) for w in values)
self.reset()
return csv
return None
def reset(self):
for attr in self.FIELDS:
if hasattr(self, attr):
delattr(self, attr)
def add_source_reference(self, ref):
try:
index = SOURCES_REFS.index(ref)
SOURCES_DUPS[0] += 1
except ValueError: # first reference
index = len(SOURCES_REFS)
SOURCES_REFS.append(ref)
try:
if index not in self.sources:
self.sources.append(index)
except AttributeError:
setattr(self, 'sources', [index, ])
```
【问题讨论】:
-
self.sources == None是问题所在。与尝试迭代 None 没有什么不同:[x for x in None] -
好的!我该如何解决这个问题以获取我的 csv.. 中的资源?