1

これまでのコードを示すことから始めます。

def err(em):
    print(em)
    exit

def rF(f):
    s = ""
    try:
        fh = open(f, 'r')
    except IOError:
        e = "Could not open the file: " + f
        err(e)

    try:
        with fh as ff:
            next(ff)
            for l in ff:
                if ">" in l:
                    next(ff)
                else:
                    s += l.replace('\n','').replace('\t','').replace('\r','')
    except:
        e = "Unknown Exception"
        err(e)
    fh.close()
    return s

何らかの理由で、次のように入力してファイルを読み取ろうとすると、Python シェル (私は 3.2.2 を使用しています) がフリーズします。

rF("mycobacterium_bovis.fasta")

rF 関数の条件は、">" トークンで始まる各行を読み取らないようにするためのものです。これらの行は DNA/RNA コード (これらのファイルから読み取ろうとしているもの) ではないため、無視する必要があります。

誰かがこれで私を助けてくれることを願っています。私のエラーは表示されません。

いつものように、よろしくお願いします!

編集: *問題は解決しません! * これは私が現在使用しているコードです。私はエラー処理を削除しましたが、これはとにかく派手な追加でしたが、それでもファイルを読み取ろうとするとシェルがフリーズします。これは私のコードです:

def rF(f):
    s = ""
      try:
          fh = open(f, 'r')
    except IOError:
        print("Err")

    try:
        with fh as ff:
            next(ff)
            for l in ff:
                if ">" in l:
                    next(ff)
                else:
                    s += l.replace('\n','').replace('\t','').replace('\r','')
    except:
        print("Err")

    fh.close()
    return s
4

1 に答える 1

1

を定義したことはありませんe
したがって、ネイキッドによって隠されている NameError が返されますexcept:

これが、例外を指定することが適切で健全な理由です。たとえば、次のようになります。

try: 
    print(e)
except NameError as e: 
    print(e)

ただし、あなたのような場合、例外が何であるかが必ずしもわからない場合は、少なくともエラーに関する情報を表示する次の方法を使用する必要があります。

import sys
try:
    print(e)
except: # catch *all* exceptions
    e = sys.exc_info()[1]
    print(e)

投稿した元のコードを使用すると、次のように出力されます。

name 'e' is not defined

更新された情報に基づいて編集し
ます。大きなファイルがある場合、そのような文字列を連結すると非常に遅くなります。
代わりに、フィルタリングされた情報を別のファイルに書き込むことを検討してください。

def rF(f):
  with open(f,'r') as fin, open('outfile','w') as fou:
    next(fin)
    for l in fin:
      if ">" in l:
        next(fin)
      else:
        fou.write(l.replace('\n','').replace('\t','').replace('\r',''))

上記のコードが、Linux2 で Python 3.2.2 [GCC 4.6.1] を使用してhttp://en.wikipedia.org/wiki/FASTA_formatにリストされているフォーマット仕様に基づいて FASTA ファイルで機能することをテストしました。

いくつかの推奨事項:

  • 小さく始めましょう。簡単な作業を行ってから、ステップを追加します。
  • print()問題のある箇所にステートメントを 追加します。

また、解析しようとしているファイルの内容に関する詳細情報を含めることを検討してください。そうすれば、私たちが助けやすくなるかもしれません。

于 2012-03-05T21:47:06.413 に答える