'None' is not displayed as I expected in Python interactive mode

It's a deliberate feature. If the python code that you run evaluates to exactly None then it is not displayed.

This is useful a lot of the time. For example, calling a function with a side effect may be useful, and such functions actually return None but you don't usually want to see the result.

For example, calling print() returns None, but you don't usually want to see it:

>>> print("hello")
hello
>>> y = print("hello")
hello
>>> y
>>> print(y)
None

Yes, this behaviour is intentional.

From the Python docs

7.1. Expression statements

Expression statements are used (mostly interactively) to compute and write a value, or (usually) to call a procedure (a function that returns no meaningful result; in Python, procedures return the value None). Other uses of expression statements are allowed and occasionally useful. The syntax for an expression statement is:

expression_stmt ::=  starred_expression

An expression statement evaluates the expression list (which may be a single expression).

In interactive mode, if the value is not None, it is converted to a string using the built-in repr() function and the resulting string is written to standard output on a line by itself (except if the result is None, so that procedure calls do not cause any output.)


In Python, a function that does not return anything but is called only for its side effects actually returns None. As such functions are common enough, Python interactive interpreter does not print anything in that case. By extension, it does not print anything when the interactive expression evaluates to None, even if it is not a function call.

If can be misleading for beginners because you have

>>> a = 1
>>> a
1
>>>

but

>>> a = None
>>> a
>>>

but is is indeed by design

Tags:

Python