类型错误:类型为 'NoneType' 的参数不可迭代,XML 到 csv 存储



我试图从xml标记中提取数据,我的代码在变量"ref"级别显示错误,但它已初始化,我想在具有相同id的行中获取每个标记的源。

我在循环之前添加了"ref=(None,None(",但我得到了为什么裁判经常出错?

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, ])
```

start函数中,在elif attr == 'sources'分支中,您永远不会更改value变量的值,因此始终为settatr(self, "sources", None)

稍后(或者之前,如果没有更多的代码,特别是__init__函数和完整的stacktrace,我无法判断(,在您的elif attr == 'sources'分支中,您将进入elif child.tag == 'S_REF'子分支,它调用在self.sources上迭代的add_source_reference

所以,如果对你来说正确的话,也许可以把你的__init__代码改为self.sources = [],否则你的代码分析起来有点复杂,特别是有很多缺失的比特,没有办法运行它(也没有数据(,所以我无法做出更好的猜测。

相关内容

最新更新