Python 3 недопустимых литерала для int () с основанием 10: «Start» - PullRequest
0 голосов
/ 25 февраля 2020

Я работаю с python 3.6.8 и передаю файл в качестве аргумента, который имеет следующую структуру:

Chr     Start       End 
chr4    153245445   153245445

Я получил эту ошибку:

 **ValueError: invalid literal for int() with base 10: 'Start'**

кажется, это исходит из строки: pos =int(line[1]) - 1

def anno(o):
    "annotate vcf file, adding basic infomations into INFO columns"

    rep_ref = {}
    if o.repeat is not None: 
        ## adding human genome's repeat region reference, mutation around repeat region is usually suspectable
        with open(o.repeat) as rep:
            rep_line = rep.rstrip().split('\t')
            rep_ref[rep_line[0]] = (rep_line[1], rep_line[2])

    mutation = {}
    variation_info = {}

    LastChr = ''
    LastPos = 0

    with open(o.query) as fin:
        # vcf file
        for line in fin:
            line = line.rstrip().split('\t')
            chr = line[0]
            try:
                pos =int(line[1]) - 1
            except:
                raise Exception("vcf header should be expluded", o.query)

            if chr != LastChr:
                LastPos = pos
                LastChr = chr

            else:
                if pos < LastPos:
                    raise Exception("vcf ", o.query, " is unsorted!\n", 'chr: ', chr, "pos: ", LastPos, pos)
                LastPos = pos

Можете ли вы помочь мне выяснить, что вызывает эту ошибку? Заранее спасибо

1 Ответ

0 голосов
/ 25 февраля 2020

Это очень похоже на домашнюю работу, которую вы не понимаете. Я предлагаю немного больше изучить, как работает чтение файлов. Тем не менее, в посте вы говорите: «... Я передаю файл в качестве аргумента, который имеет такую ​​структуру:»

Chr     Start       End 
chr4    153245445   153245445

Затем вы читаете файл с:

with open(o.query) as fin:
    # vcf file
    for line in fin:
        line = line.rstrip().split('\t')
        chr = line[0]
        try:
            pos =int(line[1]) - 1
        except:
            raise Exception("vcf header should be expluded", o.query)

При первом проходе через l oop строка будет содержать «Chr Start End». После того, как вы очистите его и разделите на части, строка [1] будет «Пуск». Ошибка - в частности, ValueError - будет возникать при попытке преобразовать ее в целое число.

Как отметил @greencloakguy в комментарии, вам нужно пропустить эту строку заголовка, что можно сделать, вставив читать строку между оператором with и для l oop.

with open(o.query) as fin:
    # vcf file
    fin.readline()
    for line in fin:
        line = line.rstrip().split('\t')
...