`return None` in python not recommended. How to bypass?

Aufwind picture Aufwind · May 14, 2011 · Viewed 41.7k times · Source

I have a function which connects to a url by httplib using lxml. It checks by xpathfor a certain pattern and if the check is positive it returns a string. But if the check was negative it returns nothing.

Now the situation is, that my function returns None. I call the function, check if its return value is not None and continue in the code.

An example:

def foobar(arg):
    # connect to page by httplib
    # check for arg in a certain pattern by lxml
    if check:
        return result
    else:
        return None

result = foobar(arg)
if result:
    # do stuff
else:
    # do other stuff

Recently I read, that this is a no go. How do I avoid such situations?

Answer

Håvard S picture Håvard S · May 14, 2011

There is nothing wrong with returning None.

In most cases, you don't need to explicitly return None. Python will do it for you. This is an altered version of your foobar which behaves identically without explicitly returning None:

def foobar(arg):
  if check:
    return result
# If not check, then None will be returned

Still, even if Python implicitly returns None, there is a value in being explicit; Your code becomes easier to read and understand. This is a constant trade-off for which there is no general answer.