There are actually some more interesting principles about None.
In Haskell (and some other programming languages), there is a Maybe (or Option) type, which is similar to sometype | None in Python >=3.10. With type hints one can then write Optional[sometype] or in a more verbose way: Union[sometype, None]
In function signatures, it is generally a good idea not to mix too many types together (for example, list, None, and str). Using None can simulate a Maybe type in such cases.
When used consistently, None serves as a clear indicator of a "missing value". It is important to note that a missing value should be treated differently from an empty value of some type (e.g., {} or ""). This distinction matters because we should not mix empty strings or empty lists too easily with None. For instance, in SQLAlchemy ORM, None translates to NULL, which adheres to the logic of a missing value.
The article raises important points about the usage of None. However, the explanation needs to be clearer so readers can better understand why one method of checking a variable is preferable to another.