は、プログラムがわかりやすくするために少し流れ、あなたのプログラムが重要な方法で失敗したときのための例外ハンドラを保存しようと変更し、ユーザーに警告するか、完全にプログラムの流れ(例外条件)を変更する必要がある
。システムが問題に遭遇したときの例外の一種として例外が存在するそれはを修正できません。
飛行機から飛び出さなければならない場合は、利用可能なパラシュートがないことがわかります。したがって、例外を処理しているときにパスが有効かどうかを確認するには、os.path.exists()
を使用してください。最も安全なデフォルトは現在のディレクトリで、.
をパスとして使用してアクセスできます。しかし、そうでない場合は、コードがクラッシュして焼く必要がある場合に備えて、ユーザーディレクトリがすでに存在していると仮定できるはずです。 mkdir
の前に例外を処理する必要があります。
また、Pythonで正しくインデントするようにしてください。スペースはエラーを捕らえるのにも役立ちますので、コードを読みやすくするために改行を使用するのを恐れないでください。あなたのtry
句は、余分なインデントレベルを必要とします。
try:
# simplify the if statement to stop repeating yourself
if not os.path.exists(project_dir):
os.makedirs(project_dir)
file_location = project_dir
except OSError as exc:
if exc.errno != errno.EEXIST:
raise # reraise the current exception
if os.path.exists(user_dir):
file_location = user_dir
else: # FUBAR. Sound sirens immediately and try everything to keep the file somewhere in memory before failing.
print("[ERROR] {} was inaccessible.\nWhile attempting to recover, {} did not exist so files could not be backed up."
.format(project_dir, user_dir))
raise
例外ハンドラの故障が起こることを許可すべきではありません。それは大惨事な出来事なので、残っている唯一のオプションがデスクトップに残っていると予想する必要があります。 1つの例外が捕捉され、そこから回復することができます。 2つか3つの入れ子にされた例外は、あなたのコンピュータが感覚を得て、デジタルシャックルを倒そうとしていることを意味します(または、例外を扱う理由について懸命に考える必要がある)。
使用している実際のインデントを反映するようにコードを投稿してください。 – patrick
ようこそStackOverflowへ。ヘルプドキュメントの投稿ガイドラインを読み、それに従ってください。 [最小、完全で検証可能な例](http://stackoverflow.com/help/mcve)がここに適用されます。 MCVEコードを投稿して問題を正確に記述するまでは、効果的にお手伝いすることはできません。 投稿したコードをテキストファイルに貼り付け、説明した問題を再現できるはずです。 – Prune
ありがとう、パトリック私のこの試みを吸い込ませようと試みたが、それを取り下げるだろう! –