2017-01-06 26 views
0

閱讀我的資料後,我用下面的腳本:如何在<class, list>中對缺失的屬性進行例外處理?

for sample in record.samples: 
    print(type(sample)) 

我得到:

<class 'vcf.model._Call'> 

有了這個:

print(sample) 

我得到:

Call(sample=MA605, CallData(GT=0/0, AD=[13, 0], DP=13, GQ=0, PB=None, PC=None, PG=0/0, PI=None, PL=[0, 0, 228], PW=0/0)) 
Call(sample=MA611, CallData(GT=0/0, AD=[57, 0], DP=57, GQ=0, PB=None, PC=None, PG=0/0, PI=None, PL=[0, 0, 1369], PW=0/0)) 
Call(sample=MA622, CallData(GT=0/1, AD=[67, 14], DP=81, GQ=99, PB=None, PC=None, PG=0/1, PI=None, PL=[229, 0, 2535], PW=0/1)) 
Call(sample=MA625, CallData(GT=0/0, AD=[58, 0], DP=58, GQ=0, PB=None, PC=None, PG=0/0, PI=None, PL=[0, 0, 590], PW=0/0)) 
Call(sample=MA629, CallData(GT=1|0, AD=[24, 5], DP=29, GQ=67, PB=.,., PC=1.0, PG=1|0, PI=5060, PL=[67, 0, 952], PW=1|0)) 
Call(sample=Ncm8, CallData(GT=0/0, AD=[7, 0], DP=7, GQ=0, PB=None, PC=None, PG=0/0, PI=None, PL=[0, 0, 147 

我試圖輸出寫入使用文件:

output.write("{}\t{}\t{}\t{}\t{}" 
      .format(contig1, pos1, ref_allele1, all_alleles1, all_freq1)) 
    for sample in record.samples: 
     output.write("\t{}\t{}".format(sample['GT'], sample['PI'])) 

一切運作良好,但我有一些行有PI場丟失 - 這意味着PI是完全缺失的,而不是(PI = None)。當我的腳本hists那行,我得到AttributeError

Traceback (most recent call last): File "/home/everestial007/PycharmProjects/stitcher/pHASE-Stitcher-Markov/pHASE-Stitcher_stage01-4_nonInteractive-MarkovModel.py", line 221, in <module> phase_block_index = record.genotype('2ms02g')['PI'] File "/home/everestial007/anaconda3/lib/python3.5/site-packages/vcf/model.py", line 104, in __getitem__ return getattr(self.data, key) AttributeError: 'CallData' object has no attribute 'PI'

如何,可我的PI值設置爲時段(.),當它是不是在我的數據(record.sample)?

我嘗試了幾種方法。我的方法之一雖然會工作是:

output.write("\t{}\t{}".format(sample['GT'] or None, sample['PI'] or None)) 

但是,仍然失敗。

任何,建議。

謝謝,

回答

0

您可以嘗試sample.get('PI') or '.'

默認情況下獲取返回None,當未定義密鑰時。

+0

我已經試過這個。沒有工作。 – everestial007