一般に、許可よりも許しを求める方がよいでしょう。とにかく各ファイルを書き込む際のエラーを処理する必要があるので、なぜ事前に確認するのでしょうか。
ただし、ユーザーインターフェイス(コマンドラインインターフェイスでも、書き込みを開始するずっと前にprefsファイルを読み取ることができる)がある場合は、ユーザーができるだけ早くエラーを返す方がはるかに便利なことがよくあります。それがこのチェックを行う唯一の理由である限り、問題はありません。
ただし、チェックの方法を改善する方法はたくさんあります。
まず、何も指定せずに使用することはほとんどありませんexcept:
。これはPythonのさまざまなバージョンでさまざまなことをキャッチする(したがって、他のバージョンに慣れている人間の読者を混乱させる)という事実に加えて、書き込み不可、不正なUnicode文字、またはコードのタイプミスを区別する方法がないことを意味します。
さらに、書き込みができない場合、エラーメッセージには「読み取り不可」と表示されますが、これはかなり奇妙なことです。
第二に、誰も名前の付いたファイルを持っていないことが確実でない限り.mwcrawler
(たとえば、または何かで始まるファイルの転送を拒否したため'.'
)、固定名を使用することは単に問題を引き起こします。より良い解決策は、例えば、を使用することtempfile.mkdtemp
です。
また、移植性を持たせたい場合は、パスに文字列操作を使用しないようにする必要があります。それがos.path
(そしてより高レベルのユーティリティ)の目的です。したがって、WindowsやzOSなどについて学習したり考えたりする必要はありません。
すべてを一緒に入れて:
try:
d = tempfile.mkdtemp(prefix='.mwcrawler', dir=dumpdir)
except Exception as e:
logging.error('Could not open %s for reading (%s), using default', dumpdir, e)
else:
os.rmdir(d)