3

私は次のような方法を持っています

    @staticmethod
    def add_transaction(name, date, amount, debit, user, category_id):
        pass

それらのいずれかが であるかどうかをテストする最良の方法は何Noneですか?

if not (name or date or amount or debit or user or category_id):
    raise ValueError
4

7 に答える 7

6
if any(arg is None for arg in (name, date, amount, debit, user, category_id))):
    raise ValueError("I hate None")

arg is Noneを使用するだけでなく、テストする必要がありますnot。を使用すると、引数のいずれかが、、などであるnot場合に例外が発生しますが、これは必要なものではありません。False0[]

@DSM の提案もif None in (name, date...機能します。どちらを好むかはあなた次第です。

補足: 関数は多くの引数を取ります。おそらく、Transactionこのデータをカプセル化するクラスを作成し、このメソッド シグネチャをadd_transaction(transaction).

于 2013-04-18T20:49:42.207 に答える
3
if None in (name, date, amount, debit, user, category_id):
    raise ValueError("I haz the Nones")
于 2013-04-18T20:53:13.990 に答える
1

None がエラーをスローする場合は、事前にチェックするのではなく、必要に応じて関数にアクセスしてエラーを処理できます。

于 2013-04-18T20:48:53.050 に答える
0

Pythonicの答えは次のとおりです。ユーザー入力(または別のプログラム、サブシステム、設定ファイルなど)からデータを取得するサブシステムのエントリポイントでない限り、そのような「検証」で時間を無駄にせず、渡されたものは何でも使用してください。有効な引数を渡す責任があり、そうしない場合、引数を使用しようとするととにかく例外が発生します。

于 2013-04-18T21:11:18.283 に答える