簡體   English   中英

在Python中,若無結果則返回什么,False或None?

[英]In Python, what to return for no results, False or None?

我有一個功能,可以查詢結果。 如果沒有結果,建議返回False或None?

我想這並不重要,但是我想遵循最佳實踐。

在這種情況下,肯定的結果將是短字符串。

假設您有這樣的示例(極其瑣碎)...

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()

...可能更具可讀性。

我將返回一個空列表,當您日后查看此函數的返回值時,它將省去您的頭痛。

如果您希望程序在假設列表中包含元素時死掉,那么None是一個不錯的選擇。

我絕對不會返回False 但是,除了NoneFalse之外,還有其他選擇。


在這種情況下,肯定的結果將是短字符串。

因此,否定結果可以是字符串。 (當然,除非這也是可能的積極結果。)

正如PEP 8所說:

對於序列(字符串,列表,元組),請使用空序列為假的事實。

但這並不是您所提問題的完整答案(首先也不是一成不變的規則)。 您必須仔細考慮優缺點,並確定在實際使用中最重要的。


我認為最大的問題是:如果返回'' ,則嘗試將結果用作字符串的代碼將起作用。 如果返回None ,則相同的代碼將引發異常。

例如,這是我所躺着的一些代碼的簡化版本:

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

我的query_function返回'' ,因此代碼將成功不打印任何ID。 這就是我想要的腳本。 但是對於不同的用例,最好拋出一個異常。 在這種情況下,我會讓query_function返回None


或者,當然,您可以像Aya的回答一樣,使query_function本身引發異常。


您可能需要查看標准字符串方法, re方法以及stdlib中的其他搜索功能(甚至可以查看sqlite等),以了解它們的作用。 (請注意,在某些情況下,存在匹配的一對返回值和引發異常的函數,例如str.findstr.index ,因此答案可能不是一個或另一個,而是兩個。)

不返回任何內容而是逐個產生結果怎么樣? 生成器通常很方便,因為它們避免建立列表,然后無論如何都要使用和丟棄這些列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM