如何使函数返回什么?

时间:2015-06-21 14:10:14

标签: python

我有一个名为crawl的函数,它会返回一个指向网站的链接。然后我做了类似的事情:

found.append(crawl())(找到一个列表)

只要抓取返回有效链接,这样就可以正常工作,但有时它不会返回任何内容。因此,None的值会添加到列表中。

所以我的问题是,是否可以从crawl返回一些不会在列表中添加任何内容的内容?

4 个答案:

答案 0 :(得分:10)

在Python中没有任何东西:None。你必须使用if-condition:

link = crawl()
if link is not None:
    found.append(link)

或让crawl返回一个列表,该列表可以包含一个或零个元素:

found.extend(crawl())

答案 1 :(得分:2)

您可以做的是将列表传递给抓取功能,如果有任何要添加的内容则附加,否则不会。类似的东西:

override func viewWillLayoutSubviews() {

    let skView = self.view as! SKView
    skView.showsFPS = true
    skView.ignoresSiblingOrder = true

    var scene = MenuScene(size: skView.bounds.size)
    scene.scaleMode = SKSceneScaleMode.AspectFill
    skView.presentScene(scene)   
}

答案 2 :(得分:1)

这是不可能的。

您可以使用以下代码测试返回的None

returned_link = crawl()
if returned_link is not None:
    found.append(returned_link)

答案 3 :(得分:1)

如果函数返回,则必须返回一个对象,即使该对象是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更快。根据用途,它可能更具可读性,因为代码自然地解释了函数出了什么问题。