2

クエリの結果を検索する機能があります。結果がない場合、False または None のどちらを返すことをお勧めしますか?

それほど重要ではないと思いますが、ベストプラクティスに従いたいと思います。

4

4 に答える 4

3

この場合、肯定的な結果は短い文字列になります。

この(非常に些細な)例のようなものがあると仮定します...

the_things = {'foo', 'bar'}

def find_the_thing(the_thing):
    if the_thing in the_things:
        return the_thing

...Noneものが見つからない場合はデフォルトで返されますが、これで問題ありません。次のように使用できます...

the_thing = find_the_thing('blah')
if the_thing is not None:
    do_something_with(the_thing)
else:
    do_something_else()

...しかし、このような例外を発生させる方が良い場合もあります....

the_things = {'foo', 'bar'}

def find_the_thing(the_thing):
    if the_thing in the_things:
        return the_thing
    raise KeyError(the_thing)

...このように使用できます...

try:
    do_something_with(find_the_thing('blah'))
except KeyError:
    do_something_else()

...もっと読みやすいかもしれません。

于 2013-05-16T18:13:05.920 に答える
1

私は絶対に戻りませんFalseNoneしかし、 vs .以外にも選択肢がありますFalse


この場合、肯定的な結果は短い文字列になります。

したがって、負の結果は空の文字列になる可能性があります。(もちろん、それが肯定的な結果である場合を除きます。)

PEP 8が言うように:

シーケンス (文字列、リスト、タプル) の場合、空のシーケンスは false であるという事実を使用します。

しかし、それはあなたの質問に対する完全な答えではありません (そもそも鉄壁のルールでもありません)。長所と短所をよく考えて、実際の使用においてどちらが最も重要かを判断する必要があります。


最大の問題はこれだと思います: を返す''と、結果を文字列として使用しようとするコードが機能します。を返すNoneと、同じコードで例外が発生します。

たとえば、これは私が横たわっているいくつかのコードの簡略化されたバージョンです。

result = query_function(foo, bar)
soup = bs4.BeautifulSoup(result)
for div in soup.find_all('div'):
    print(div['id'])

私のquery_function戻り値''なので、コードは ID を正常に出力しません。それが私のスクリプトに欲しいものです。ただし、別のユース ケースでは、例外を発生させたほうがよい場合があります。その場合、私はquery_functionreturnを作成しNoneます。


query_functionまたは、もちろん、 Aya の回答のように、例外を発生させることもできます。


stdlib 内の標準の文字列メソッド、reメソッド、およびその他の検索関数を調べて (おそらくsqliteなどを調べて)、それらが何を行うかを確認することをお勧めします。str.find(場合によっては、 と のように、値を返す関数と例外を発生させる関数のペアが一致するstr.indexため、答えはどちらか一方ではなく、両方であることに注意してください。)

于 2013-05-17T18:26:49.530 に答える
1

空のリストを返します。これにより、この関数の戻り値を後で見るときに頭を悩ませることがなくなります。

ただし、リストに要素があると仮定したときにプログラムを終了させたい場合は、[なし] を選択することをお勧めします。

于 2013-05-16T18:21:54.340 に答える