2

この質問の一般的な要点: 何かがうまくいかない可能性が少しでもある場合、考えられるエラーをキャッチする必要がありますか? 具体的には:

プログラムの以前の履歴を .txt ファイルに読み書きするアプリがあります。初期化時に、プログラムは履歴ファイルを読み取って、実行する必要がある操作と実行しない操作を決定します。履歴ファイルがまだ存在しない場合は、作成されます。そのようです:

global trackList
try:
    # Open history of downloaded MP3s and transfer it to trackList
    with open('trackData.txt', 'r') as f: 
        trackrackList = f.readlines()
except Exception, e: #if file does not exist, create a blank new one
    with open('trackData.txt', 'w') as f:
        f.write("")

次に、プログラムは、txtファイルに含まれているかどうかに基づいて、MP3 のダウンロードに進みます。MP3 をダウンロードすると、それをtxtファイルに追加します。そのようです:

mp3File = requests.get(linkURL)
with open('trackData.txt', 'a') as f:
    f.write(linkURL + '\n')

txtこれで、ファイルが最初の関数で作成された時点から残っていることがほぼ 100% 確実になります。ここでは、いくつかの MP3 をダウンロードしています。プログラムは数分以上実行されることはありません。ただし、履歴txtファイルがユーザーによって削除されたか、MP3 のダウンロード中に破損した可能性がわずかにあります。その場合、エラー処理がないため、プログラムがクラッシュします。

優れたプログラマーは、履歴ファイルが存在しない場合try ... except、履歴ファイルを作成するブロックにコードの最後のブロックをラップしますか? それとも、それは単に不必要なパラノイアと無駄なスペースですか? txt実装するのは簡単ですが、ユーザーが以前に作成したtxtファイルをわずかな時間で削除/破損する機会が文字通り何百もあるこのようなプログラムがあることに注意してください。try ... except通常はフラットな Python コードが、ネストされた地雷原に変わります。

4

2 に答える 2

5

より安全な解決策は、ファイルを開き、ダウンロード中は開いたままにすることです。その後、ユーザーはそれを削除できなくなります。すべてをダウンロードしてログに記録したら、ファイルを閉じます。これにより、パフォーマンスも向上します。

于 2013-03-06T21:12:22.623 に答える
5

アプリケーションの起動時に空のファイルを作成するのはなぜですか? 起動時にファイルが存在しない場合は、何もしないでくださいopen('trackData.txt', 'a')。新しいファイルが作成されます。

于 2013-03-06T21:12:41.410 に答える