[英]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
。 但是,除了None
和False
之外,還有其他選擇。
在這種情況下,肯定的結果將是短字符串。
因此,否定結果可以是空字符串。 (當然,除非這也是可能的積極結果。)
正如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.find
和str.index
,因此答案可能不是一個或另一個,而是兩個。)
不返回任何內容而是逐個產生結果怎么樣? 生成器通常很方便,因為它們避免建立列表,然后無論如何都要使用和丟棄這些列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.