次のコードを含む python 関数があります。
with open(modelfilepath, "rb") as modelfile, open(vcffilepath, "rb") as vcffile:
for row in gtf_getrow(modelfile):
print row
#add features as appropriate
if row["feature"] == "transcript":
addfeature(some args...)
if row["feature"] == "exon":
addfeature(some other args..., vcffile=vcffile)
addfeature() 関数の実行は、ループに戻る前にいくつかの関数を通過しfor
ます。「エクソン」の場合、vcffile
オブジェクトは引数として連続する関数に渡され、最終的にvcffile
.
問題は、数回繰り返した後、vcffile
オブジェクトが自然に閉じたように見え、プログラムがクラッシュすることです。ファイル名に直接アクセスするために使用する関数をハードコーディングするvcffile
と、問題は発生しませんが、 with ブロックからファイルの制御が削除されるため、これは望ましくない解決策のように思えます。また、このプログラムは数百メガバイトに相当する表形式のデータを解析しているため、ファイルにアクセスするたびにファイルを開いたり閉じたりする必要もありません。ご提案いただきありがとうございます。