python报错Traceback (most recent call last):

报错内容如下:

(env_name) [lhh@gpu RawData]$ python merge_deletions.py -f deletions.list

Traceback (most recent call last): File "merge_deletions.py", line 67, in <module> save_deletions(master_dictionary, options.filename+'.bed') NameError: name 'master_dictionary' is not defined

合并的文件为deletions_A.bed,deletions_B.bed...

内容为:

chr1 287 555 + ID1 0

chr1 676 789 +ID2 1

merge_deletions.py代码为

#! /usr/bin/env python

 

 

def create_master_dict(sample, fname):

    with open(fname, 'r') as masterfile:

        x = 0

        master_dict = {}

        for line in masterfile:

            field = line.rsplit()

            if line[0] == 'ins_chr':

                pass

            else:

                coords = '\t'.join(field[:5])

                master_dict[x] = {'coords': coords, 'accessions': [sample]}

                x += 1

        return master_dict

 

 

def merge_deletions(master, fname, sample):

    with open(fname, 'r') as infile:

        for line in infile:

            field = line.rsplit()

            coords = '\t'.join(field[:5])

            i = len(master)-1

            x = 0

            while x <= i:

                if master[x]['coords'] == coords:

                    master[x]['accessions'].append(sample)

                    break

                elif x == i:

                    master[x+1] = {'coords': coords, 'accessions': [sample]}

                    break

                else:

                    x += 1

 

 

def save_deletions(master, outf):

    with open(outf, 'w+') as outfile:

        for key, value in master.iteritems():

            accessions = set(value['accessions'])

            outfile.write('{c}\t{a}\n'.format(c=value['coords'], a=','.join(accessions)))

 

if __name__ == "__main__":

    import os

    from argparse import ArgumentParser

 

    parser = ArgumentParser(description='Merge TE deletions calls')

    parser.add_argument('-f', '--filename', help='filename prefix for merge files', required=True)

    options = parser.parse_args()

 

    for dirs in os.listdir('.'):

        if os.path.isdir(dirs) is True:

            os.chdir(dirs)

            if os.path.isfile(options.filename+'_{d}.bed'.format(d=dirs)) is True:

                print "Processing {d}".format(d=dirs)

                try:

                    master_dictionary

                except NameError:

                    master_dictionary = create_master_dict(dirs, options.filename+'_{d}.bed'.format(d=dirs))

                else:

                    merge_deletions(master_dictionary, options.filename+'_{d}.bed'.format(d=dirs), dirs)

                os.chdir('..')

            else:

                os.chdir('..')

        else:

            pass

    save_deletions(master_dictionary, options.filename+'.bed')

 

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^