Skip to main content

Why Your Python Function Prints None (and How to Fix It)

Seeing None printed unexpectedly when you call a Python function is a common source of confusion, especially for beginners.

This guide explains the fundamental reasons why a function might print None, and how to ensure your functions return and print the values you expect.

Understanding print() vs. return

It's critical to understand the difference between print() and return:

  • print(): Displays a value on the console (standard output). It doesn't affect the function's return value. print() itself always returns None.
  • return: Specifies the value that a function sends back to the caller. This is the function's output. If a function doesn't have a return statement, it implicitly returns None.
def example():
print('tutorialreference.com') # This prints to the console

result = example() # Calls the function and stores the result in variable
print(result) # Output: None (because example() doesn't return anything)

#Correct way
def example():
print('tutorialreference.com') # Prints to the console
return 'abc' # Returns a value
result = example()
print(result) # Output: abc
  • The function now returns abc which is stored in the result variable, and printed in the console.

Common Causes of None Output

Here are the most frequent reasons why your function might be printing None unexpectedly:

Missing return Statement

The most common mistake is simply forgetting to return a value:

def example(name):
print('site: ' + name) # Prints, but doesn't RETURN

result = example('tutorialreference.com') # result will be None
print(result) # Output: None

If the function does not return a value, it implicitly returns None.

Fix: Add a return statement:

def example(name):
return 'site: ' + name # Now the function returns a string

Assigning the Result of print()

The print() function displays something, but always returns None:

website = print('tutorialreference.com')    # WRONG:  print() returns None
print(website) # Output: None

Fix: Assign the value you want to print to a variable, then print the variable:

website = 'tutorialreference.com'   # Correct, the string is stored
print(website) # Output: tutorialreference.com

Functions with Conditional Returns

If a function sometimes returns a value and sometimes doesn't, you'll get None in the cases where it doesn't:

def get_name(a):
if len(a) < 5:
return a # Only returns if the condition is met
# Implicitly returns None if len(a) >= 5

result = get_name('tutorialreference.com')
print(result) # Output: None

Fix: Ensure that all execution paths within the function have a return statement:

def get_name(a):
if len(a) < 5:
return a
return '' # Return something (e.g., an empty string) if the condition is false
  • Provide an explicit return for the cases where the condition is not met.

In-Place Modification Methods (e.g., list.sort(), list.append())

Many methods that modify lists, dictionaries, or other mutable objects in-place return None:

a_list = ['z', 'a', 'b', 'c']
result = a_list.sort() # sort() modifies a_list *in place* and returns None
print(result) # Output: None
print(a_list) # Output: ['a', 'b', 'c', 'z']

Fix: Don't assign the result of in-place methods. Call the method, and then (if needed) print the modified object:

a_list = ['z', 'a', 'b', 'c']
a_list.sort() # Sort in-place
print(a_list) # Output: ['a', 'b', 'c', 'z']
  • In this example, the sort() method sorts the a_list list and returns None.

Best Practices for Avoiding None Issues

  • Always have a return statement: Even if you're not returning a specific value, it's good practice to have an explicit return None at the end of a function to make it clear that the function doesn't return anything meaningful.
  • Be mindful of in-place methods: Understand which methods modify objects in place (and return None) and which ones return new objects.
  • Use type hints: Type hints can help you and your IDE catch potential None issues early:
def get_name(a: str) -> str:  # Type hints help clarify inputs and outputs
if len(a) < 5:
return a
return ""

Conclusion

This guide covered various methods for printing the output of a function, and emphasized the importance of returning a value from the function to avoid printing None. The output of the function can be printed by storing the result of calling the function in a variable, and then calling the print function on the variable.

  • Understanding the difference between print() and return is crucial. print() displays output, return provides the function's result.
  • If you see unexpected None values, carefully check your function's return statements, and be aware of methods that modify objects in-place.

By following these principles you will avoid unintentional None errors.