如何正确嵌套if语句?第二个if语句后面的NameError

时间:2013-09-18 23:14:34

标签: python conditional-statements

第二个嵌套的if语句无法识别声明的名称。我在第二个if语句之后注释掉了代码,但是我需要它。文件中有很多行。从那些有CDS字符串的那些我需要一个符号row[6],而那些有特征字符串的那些我需要一切,但我也需要知道这个符号。 CDS和要素行中的ID应匹配,因此测试if t.group(2) == n.group(2)。我尝试了继续声明,但它仍然无效。谢谢你的帮助

Traceback (most recent call last):
  File "../scripts/gff_cds.py", line 22, in <module>
    print sign
NameError: name 'sign' is not defined

import sys, csv, re

gff_ref = open(sys.argv[1])
parse_ref = csv.reader(gff_ref, delimiter='\t')

writer = csv.writer(sys.stdout)

ref_list = [] 

for row in parse_ref:
    if len(row) > 1 and 'remark' not in row and 'CDS' in row:
        t = re.search('(Transcript):(\w+.\w+\.?[0-9]?)', row[8])
        temp = t.group(2)
        sign = row[6]
    #    continue
    if 'feature' in row:
        print sign, temp
    #    ref_dict = {}
    #    n = re.search('(\W\w+):(\w+.\w+\.?[0-9]?)', row[8])
    #    if temp == n.group(2):
    #        ref_dict['seqname'] = row[0]; ref_dict['start'] = int(row[3]);
    #        ref_dict['end'] = int(row[4]); ref_dict['strand'] = sign;
    #        ref_dict['id'] = t.group(2)
    #        
    #        ref_list.append(ref_dict)

E.g

CHROMOSOME_I功能inferred_pa​​rent 13349410 13358674。 。 。 ID =文稿:Y40B1A.3c

CHROMOSOME_I Coding_transcript CDS 13349410 13349478。 + 0 ID = CDS:Y40B1A.3c; Parent = Transcript:Y40B1A.3c; status = Partially_confirmed; wormpep = CE:CE45409

CHROMOSOME_I Coding_transcript CDS 13353007 13353245。 + 0 ID = CDS:Y40B1A.3c; Parent = Transcript:Y40B1A.3c; status = Partially_confirmed; wormpep = CE:CE45409

CHROMOSOME_I Coding_transcript CDS 13354069 13354225。 + 0 ID = CDS:Y40B1A.3c; Parent = Transcript:Y40B1A.3c; status = Partially_confirmed; wormpep = CE:CE45409

1 个答案:

答案 0 :(得分:2)

如果sign检查给出了真实结果,则只指定len(row) > 1 and 'remark' not in row and 'CDS' in row。如果它是假的,sign永远不会收到值,但无论如何你都试图使用它。

我不明白你要对这段代码做什么,所以我无法确定正确的修复,但首先要做的是检查你的缩进级别。确保应该在if块中的内容在块中,并且不应该在块中的内容是未缩进的。