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.