Python bc_dict, TypeError: неподдерживаемые типы операндов для +: 'NoneType' и 'str' - PullRequest
1 голос
/ 05 апреля 2019

Я пытаюсь демультиплексировать чтения ДНК, которые были подготовлены с использованием нового подхода секвенирования. Сценарий 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 остаются только тег образца и фрагменты.

1 Ответ

1 голос
/ 05 апреля 2019
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. Вам нужно будет вернуться и выяснить, что это за переменная и где она получает свое значение.

...