1. ホーム
  2. python

[解決済み] 関数で例外を発生させるか、Noneを返すか?重複

2023-03-11 21:02:03

質問

Pythonのユーザー定義関数でベタープラクティスなのは。 raise 例外か return None ? 例えば、あるフォルダの中で一番新しいファイルを見つける関数があります。

def latestpdf(folder):
    # list the files and sort them
    try:
        latest = files[-1]
    except IndexError:
        # Folder is empty.
        return None  # One possibility
        raise FileNotFoundError()  # Alternative
    else:
        return somefunc(latest)  # In my case, somefunc parses the filename

もう一つの選択肢は、例外を残して呼び出し側のコードで処理することですが、私はより明確に FileNotFoundError よりも IndexError . それとも、例外を別の名前で再提示するのは悪いことなのでしょうか?

どのように解決するのですか?

それは本当にセマンティクスの問題なのです。 何をするかというと foo = latestpdf(d) とは ?

最新のファイルがないのは至極当然なのでしょうか? それなら確かに、ただ None .

常に最新のファイルが見つかるとでも思っているのでしょうか? 例外を発生させましょう。 そして、はい、より適切な例外を再度発生させることは問題ありません。

これがどのディレクトリにも適用されることを想定した一般的な関数であるなら、私なら前者で None . ディレクトリが、たとえば、アプリケーションの既知のファイル セットを含む特定のデータ ディレクトリであることを意図している場合、私は例外を発生させます。