如何修复‘AttributeError: 'generator' object has no attribute 'nextRead'’错误?
问题修复方案
错误原因
fastq.read(filename)返回的是生成器对象,这类对象没有nextRead()方法,这是触发AttributeError的直接原因。
修复代码
将原有的while循环替换为遍历生成器的for循环,这是Python处理生成器/迭代器的标准写法,更简洁且不易出错:
def stat(filename): reader = fastq.read(filename) total_count = 0 q20_count = 0 q30_count = 0 # 直接遍历生成器获取每个read条目 for read in reader: if not read: continue total_count += len(read[3]) q20, q30 = qual_stat(read[3]) q20_count += q20 q30_count += q30
补充说明
如果一定要用手动迭代的方式(不推荐),需要用next()函数配合异常捕获(生成器耗尽时会抛出StopIteration):
def stat(filename): reader = fastq.read(filename) total_count = 0 q20_count = 0 q30_count = 0 while True: try: read = next(reader) except StopIteration: # 生成器遍历完毕,退出循环 break total_count += len(read[3]) q20, q30 = qual_stat(read[3]) q20_count += q20 q30_count += q30
你之前直接用next()出错,就是因为没处理生成器耗尽时的异常。
内容的提问来源于stack exchange,提问作者apcreyes
相关产品推荐
相关产品推荐

