[解決済み] FileNotFoundErrorを正しく発生させるには?
2023-07-14 07:54:59
質問
サードパーティのライブラリを使用していますが、私が望むような方法で存在しないファイルを処理できません。存在しないファイルを与えるとき、古き良き時代の
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
これは "Syntax error in file None" よりも良いですが、再実装せずに、適切なメッセージで "real" 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'
関連
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] リストが空かどうかを確認するにはどうすればよいですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
-
[解決済み] djangoのQueryDictをPythonのDictに変更するには?
-
[解決済み] Django filter queryset __in for *every* item in list
-
[解決済み] Alembicアップグレードスクリプトでインサートやアップデートを実行するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Pandasのデータフレームでタプルの列を分割するにはどうしたらいいですか?
-
[解決済み] Pythonのマルチプロセッシングプールimap_unorderedの呼び出しの進捗を表示しますか?
-
[解決済み] django.db.migrations.exceptions.InconsistentMigrationHistory
-
[解決済み] dict を txt ファイルに書き、それを読み取る?
-
[解決済み] 値で列挙名を取得する [重複]。
-
[解決済み] スペースがないテキストを単語のリストに分割する方法
-
[解決済み] Flask でグローバル変数はスレッドセーフか?リクエスト間でデータを共有するには?
-
[解決済み] Celeryタスクのユニットテストはどのように行うのですか?
-
[解決済み] Pandasを使って、既存のExcelファイルに新しいシートを保存する方法は?
-
[解決済み] virtualenvsはどこに作成するのですか?