サードパーティのライブラリを使用しますが、それは問題ありませんが、存在しないファイルを希望どおりに処理しません。古き良きものを上げるのではなく、存在しないファイルを与えるとき
_FileNotFoundError: [Errno 2] No such file or directory: 'nothing.txt'
_
あいまいなメッセージが表示されます。
_OSError: Syntax error in file None (line 1)
_
不足しているファイルを処理したくない、例外をキャッチしたり処理したりしたくない、カスタム例外を発生させたくない、ファイルをopen
したい、作成したくないそれは存在しません。
私はそれが存在することを確認したいだけです(os.path.isfile(filename)
はトリックを行います)、そうでない場合は、適切なFileNotFoundErrorを発生させます。
私はこれを試しました:
_#!/usr/bin/env python3
import os
if not os.path.isfile("nothing.txt"):
raise FileNotFoundError
_
出力のみ:
_Traceback (most recent call last):
File "./test_script.py", line 6, in <module>
raise FileNotFoundError
FileNotFoundError
_
これは「ファイル内の構文エラーなし」よりも優れていますが、再実装することなく、適切なメッセージで「本当の」python例外を発生させることができますか?
引数を渡す:
_import errno
import os
raise FileNotFoundError(
errno.ENOENT, os.strerror(errno.ENOENT), filename)
_
FileNotFoundError
は OSError
のサブクラスで、いくつかの引数を取ります。最初は errno
モジュール (見つからないファイルは常に_errno.ENOENT
_)からのエラーコード、2番目はエラーメッセージ( os.strerror()
これを取得するには)、ファイル名を3番目として渡します。
トレースバックで使用される最終的な文字列表現は、これらの引数から構築されます。
_>>> print(FileNotFoundError(errno.ENOENT, os.strerror(errno.ENOENT), 'foobar'))
[Errno 2] No such file or directory: 'foobar'
_