0

コード配列を見つける

cds_position = ''
cds_start = 0
cds_end = 0
cds_sequence = ''

for line in data:
    cds_temp = ''
    if re.findall(r' CDS ',line):
        cds_temp = cds_temp + line.replace('\n','')
        position = re.search(r'(\d+)\.\.(\d+)',cds_temp)
        cds_start = cds_start + int(position.group(1))
        cds_end = cds_end + int(position.group(2))
        cds_position = str(cds_start)+':'+str(cds_end)

cds_sequence = cds_sequence + sequence[(cds_start-1):(cds_end-1)]

このエラーが発生します

Traceback (most recent call last):
  File "Upstream_ORF.py", line 357, in <module>
    GenBank_Reader(test_file)
  File "Upstream_ORF.py", line 317, in GenBank_Reader
    cds_start = cds_start + int(position.group(1))
AttributeError: 'NoneType' object has no attribute 'group'

わかりました。なぜこのエラーが発生するのか本当にわかりません。

特定の形式のファイルを1行ずつ処理するスクリプトを作成しました。特定の文字列に続いて10個のスペースが見つかると、それに続く数値が使用されます。

 exon            1..1333
                 /gene="BRD2"
                 /gene_synonym="D6S113E; FSH; FSRG1; NAT; RING3; RNF3"
                 /inference="alignment:Splign:1.39.8"
                 /number=3
 STS             350..463
                 /gene="BRD2"
                 /gene_synonym="D6S113E; FSH; FSRG1; NAT; RING3; RNF3"
                 /standard_name="CGCb278"
                 /db_xref="UniSTS:240930"

したがって、エクソンという単語の後に10個のスペースが続く場合は常に、「..」に隣接する数字が使用されます。5つの異なるファイルで機能しましたが、そのうちの1つでは機能せず、まったく同じ形式です。他のものと一緒に動作するので、なぜ今動作しているのかわかりません。ファイル内に「エクソン」と表示されているすべてのオカレンスが見つかりましたが、探していたもののように10個のスペースが隣接しているものはありませんでした。

同じ形式の他のファイルで機能する場合、なぜこのエラーが発生するのでしょうか。

4

1 に答える 1

1

re.searchが返された場合はNone、一致するものが見つからなかったことを意味します。問題のファイルには、式が失敗する原因となる別の何かが含まれている必要があります。

あなたのコードについての小さなコメントのカップル:

  • if re.findall(r' CDS ',line):不要です。を実行するだけif ' CDS ' in line:で、部分文字列検索が実行されます。
  • より一般的であるため、代わりにline.replace('\n','')を使用する必要がありますline.rstrip('\n')
于 2012-09-25T00:35:22.877 に答える