我有一个叫做crawl
的函数,它会返回一个网站的链接。然后,我做这样的事情:如何使函数不返回任何内容?
found.append(crawl())
(发现是一个列表)
这工作只要细如爬行返回一个有效的链接,但有时它不返回任何东西。所以值None
被添加到列表中。
所以我的问题是,是否有可能从crawl
返回的东西不会添加任何东西到列表中?
我有一个叫做crawl
的函数,它会返回一个网站的链接。然后,我做这样的事情:如何使函数不返回任何内容?
found.append(crawl())
(发现是一个列表)
这工作只要细如爬行返回一个有效的链接,但有时它不返回任何东西。所以值None
被添加到列表中。
所以我的问题是,是否有可能从crawl
返回的东西不会添加任何东西到列表中?
这是不可能的。
您可以使用以下代码测试返回的None
。
returned_link = crawl()
if returned_link is not None:
found.append(returned_link)
'如果returned_link:'可能会错误地跳过追加,如果'crawl'可以返回,例如空字符串。如果你想测试'None',最好是明确的:'如果returned_link不是None:' – lvc
@lvc,谢谢你。没有意识到空弦会影响条件。编辑答案以反映该建议。 –
你可以做的是通过在以抓取列表函数,如果有任何要添加的东西,否则不要。喜欢的东西:
def crawl(found):
""" Add results to found list """
# do your stuff saving to result
if result is not None:
found.append(result)
# Call this as
crawl(found)
如果一个函数返回它返回一个对象,即使对象是None
。然而,还有一个被忽视的答案,那就是提出一个例外而不是返回None
。
正如其他人所指出的,一种方法是检查返回的对象是None
追加到列表之前:
link = crawl()
if link is not None:
found.append(link)
另一种方法是定义一些例外,也许WebsiteNotFoundError
,并有crawl
执行raise WebsiteNotFoundError
而不是return None
。然后,你可以这样写:
try:
found.append(crawl())
except WebsiteNotFoundError:
pass # or take appropriate action
异常处理方法的优点是,它通常比为None
检查相比,返回一个有效的链接,如果返回None
是一种比较罕见的发生得更快。根据使用情况,代码可以更自由地解释函数出了什么问题。
作为一个脚注,这听起来像一个可怕的问题。 – Rishav
不,这不可能仅仅因为'None' *是*什么都不是。你可以做的最好的是'retval = crawl();如果retval:found.append(retval)'。 – vaultah
虽然在技术上你必须返回一些东西,即使它是'None',我不同意为了*实际*的目的,检查'None'不是唯一的可能性。当一个正在构建列表的函数遇到问题时,引发异常而不是返回'None'是一个非常合理的事情。如果导致'return None'或异常的情况不常见,异常处理可以比检查'None'具有更好的性能。 –