我正在尝试解复用使用新型测序方法制备的DNA读数。旨在完成此任务的Python脚本引发了一个我不确定如何解决的错误:
File "demultiplex3.1.py", line 693, in <module>
bc_dict = parse_bc(opts.barcode, Flowcell, Lane)
File "demultiplex3.1.py", line 315, in parse_bc
bc_dict[bc_instance.get_seq()] = bc_instance
File "demultiplex3.1.py", line 266, in get_seq
R1_start = (self.Wobble_R1, self.Barcode_R1 + 'Y' + self.enz_remnant_R1)
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
我试图使用PyCharm 2016.1.4以及我大学的研究计算集群来运行它,并且在两个平台上都收到了相同的错误。
以下是错误产生的代码行:
第693-697行
bc_dict = parse_bc(opts.barcode, Flowcell, Lane)
if not os.path.exists(opts.outputdir):
os.mkdir(opts.outputdir)
opts.output = tempfile.mkdtemp(prefix='seq', dir=opts.outputdir)
if os.path.exists(opts.output):
314-316行
if bc_instance.Flowcell == fc and bc_instance.Lane == ln:
bc_dict[bc_instance.get_seq()] = bc_instance
return bc_dict
第262-269行
def get_seq(self):
"""Return sequence to search on left and right read"""
# design of Read_1 is NNN|BARCODE|CONTROL-NT|ENZ-REMNANT
# CONTROL-NT for R1 is either C or T, put Y as control nucleotide
R1_start = (self.Wobble_R1, self.Barcode_R1 + 'Y' + self.enz_remnant_R1)
# CONTROL-NT for R2 is either G or A, put R as control nucleotide
R2_start = (self.Wobble_R2, self.Barcode_R2 + 'Y' + self.enz_remnant_R2)
return (R1_start, R2_start)
我不是代码的作者,而且在解决Python编码中的错误方面相当绿。解复用脚本被设计为基于在样本的实验室准备期间附加的条形码适配器将样本名称附加到片段,然后剥离条形码的适配器序列,使得样本标签和片段保留在fastq文件中。
R1_start = (self.Wobble_R1, self.Barcode_R1 + 'Y' + self.enz_remnant_R1)
错误
+
不支持的操作数类型:NoneType
和str
“
意味着代码试图做A + B
,其中A
是None而B
是一个字符串,一个非法的操作。它不能是第二个+
,因为它的左操作数(self.Barcode_R1 + 'Y'
的结果)显然不是None。它必须是左+
。
因此,self.Barcode_R1
必须是None。您需要回溯并找出该变量是什么以及它获取其值的位置。