使用Yield并返回错误列表

le_*_*ine 5 python yield generator

我有一段代码(一个xls解析器),它对字段进行一些验证,并返回yield,一个包含xls每一行的生成器.

现在,我必须在列表中收集验证错误,并在生成器耗尽时使用它们.

这是代表解析器和设计不佳的解决方案的一段代码.

error_list = []

def gen(limit): #xls parser
    for x in range(limit):
        if x%2: #fake error contition
            error_list.append(x)
        else:
            yield(x*x) #return
Run Code Online (Sandbox Code Playgroud)

有更多的pythonic方式来做到这一点?我不是全球变量的忠实粉丝.

我喜欢尽可能地保持代码,但如果没有其他方法我会将功能转换为经典

def gen(limit): #xls parser
    error_list = []
    results = []
    for x in range(limit):
        if x%2: #fake error contition
            error_list.append(x)
        else:
            results.append(x*x)
    return results, error_list
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 5

生成器函数不能像这样返回带外数据.

我会使用一个,因为一个实例给你一些东西来坚持这样的额外状态:

class XLSParser(object):
    def __init__(self, limit):
        self.error_list = []
        self.limit = limit

    def __iter__(self):
        for x in range(self.limit):
            if x%2: #fake error condition
                self.error_list.append(x)
            else:
                yield(x*x) #return
Run Code Online (Sandbox Code Playgroud)

并遍历该对象:

parser = XLSParser(limit)
for result in parser:
    # do something

errors = parser.error_list
Run Code Online (Sandbox Code Playgroud)