2016-03-25 5 views
0

私は特にtempfileライブラリを使用して作成された一時ファイルで動作するプログラムを作成しています。プログラムが失敗した場合、Pythonは一時ファイルを削除しません。

一時ファイルが作成され、機能を埋め:

def func(): 
    mod_script = tempfile.NamedTemporaryFile(dir='special') 
    dest = open(mod_script, 'w') 
    # filling dest 
    return mod_script 

(私はfunc()を呼び出した後、一時ファイルを実行するので、私はopen()なくwith open()を使用)

func()mod_scriptといくつかの操作をした後、私はmod_script.close()に電話してください。そして、すべて正常に動作します。

しかし、私には1つの問題があります。私のプログラムが失敗した場合(または中断した場合)、一時ファイルは削除されません。

どうすれば修正できますか?

私は実際にはtry...except...finally句を書いたくありません。なぜなら、何度も書く必要があるからです(私のプログラムが失敗するところがたくさんあります)。

+2

なぜファイルを削除してから例外を再発生させるのが目的なら、どこにでもtry/except/finallyを書かなければならないのはなぜですか?例外をバブルアップさせて、コードの最外層をtryでラップすることができないのはなぜですか?あるいは、終了時にファイルを削除するコンテキストマネージャーを書いてください。 – timgeb

+4

"func()を呼び出した後に一時ファイルを実行するため、open()を使用し、open()を使用しません" - ハァッですか?私はあなたの推論を理解していません。精巧な –

+0

'mod_script'を返すと、私は多くの場所でそれを使用します。私のプログラムは、最初に 'mod_script'を使う前、' n'stと 'n + 1'stの間で失敗する可能性があります。' func() 'を' try ... except'して追加すると、状況。 – VeLKerr

答えて

1

最初にwithステートメントとpass delete=False to the constructorステートメントを使用します。

次に、プログラムに必要なエラー処理を行う必要があります。例外をキャッチし(try..finally参照)、プログラムの終了時に正常終了または異常終了のいずれかをクリーンアップします。

また、ファイルの実行中にファイルを開いたままにしておくと、ファイルを実行する前に自動的にファイルを削除して削除しないようにすることができます。これは、開かれているファイルを使用して競合する傾向があるWindows上で問題が発生する可能性があります。

関連する問題