1

出力に正しいサフィックスがあるかどうかを確認して、他の関数から使用するためにこの関数を作成しました。使用する前に、2 つの質問があります。

  1. この場合に使用するのにTypeError最適な例外はありますか?

  2. 私の代わりに使用できる組み込み関数はありますか?

コード:

def suffix_NameCheck(inFile):
    if os.path.splitext(inFile)[1] is None:
        raise TypeError('"%s" has not a suffix' % inFile)
    else:
        return inFile
4

3 に答える 3

7

これを行う組み込み関数はありません。

  1. すべてのファイル システムが実際に拡張子を使用しているわけではありません。
  2. おそらく、if ステートメントを関数にスローするよりも、単独で使用する方が一般的です。

その理由は、おそらくその例外をどこかでキャッチする必要があるからです (意図的にプログラムを終了させたい場合を除きます。その場合は、例外をスローするよりもおそらくそれを行うためのより良い方法がありますsys.exit)。if例外をキャッチするコードは、チェック自体を実行してそれを処理するコードと少なくとも同じくらい関与します。

于 2012-12-21T14:48:37.893 に答える
5

という名前の関数から例外を発生させるのではなく、代わりにorをsuffix_NameCheck返します。の通常の操作は、値に正しいサフィックスがあるかどうかに影響されません。その仕事は、そのサフィックスをチェックすることです。TrueFalsesuffix_NameCheck

を使用 する関数suffix_NameCheckは依然として例外を発生させる可能性があります。ValueErrorその場合に使用するより良い例外かもしれません。

于 2012-12-21T14:49:54.630 に答える
2

私はこれがより適切だと思いますValueError。あなたが報告しようとしている問題は、ユーザーがファイル パス/名前の引数をファイル拡張子のない文字列として指定したことです。これは、型の問題ではなく、文字列の値の問題です。

他の回答者は、一見したところ、この種の機能は実際には を返す必要があるという点を指摘していますがbool、そのユースケースが単に でカバーされていることbool(os.path.splitext(candidate)[1])を考えると、ここで本当に例外を発生させたい場合は、すでに で作業していると思いますを返す下位レベルの関数bool

于 2012-12-21T14:48:42.993 に答える