statistical test
Chi-squared test - Wikipedia
A chi-squared test (also chi-square or Ο‡2 test) is a statistical hypothesis test used in the analysis of contingency tables when the sample sizes are large. In simpler terms, this test is … Wikipedia
🌐
Wikipedia
en.wikipedia.org β€Ί wiki β€Ί Chi-squared_test
Chi-squared test - Wikipedia
3 weeks ago - Suppose there is a city of 1,000,000 residents with four neighborhoods: A, B, C, and D. A random sample of 650 residents of the city is taken and their occupation is recorded as "white collar", "blue collar", or "no collar". The null hypothesis is that each person's neighborhood of residence is independent of the person's occupational classification.
🌐
Real Python
realpython.com β€Ί null-in-python
Null in Python: Understanding Python's NoneType Object – Real Python
December 15, 2021 - In this tutorial, you'll learn about the NoneType object None, which acts as the null in Python. This object represents emptiness, and you can use it to mark default parameters and even show when you have no result. None is a tool for doing everything with nothing!
Discussions

Null object in Python - Stack Overflow
In Python, the 'null' object is the singleton None. To check if something is None, use the is identity operator: More on stackoverflow.com
🌐 stackoverflow.com
Script Editor - If statement - String is NULL
Hi everybody, I needed to compare a string with NULL or see if the string is empty. I tried the python function .isNull() >> doesn’t works. I tried isNull(string_to_compare) >> doesn’t works. Finally I founded: if (string_to_compare == None): else: Trying to help, More on forum.inductiveautomation.com
🌐 forum.inductiveautomation.com
0
April 21, 2022
What's the most pythonic way of checking if variable is None or empty string ""?
Both None and "" are falsy values so simply if not variable: will cover both those cases. This doesn't explicitly check for those values but if you're just checking for something not being set this is probably the way to go. More on reddit.com
🌐 r/learnpython
9
4
July 6, 2021
Add None coalescing operator in Python - Ideas - Discussions on Python.org
Just like in Javascript there is Nullish coalescing operator(??) for checking for null values, it would be a nice addition to python as python also hasNone . Currently users often check for None with if statement: if foo is not None: return bar Or using or : foo or bar With or the problem is ... More on discuss.python.org
🌐 discuss.python.org
5
April 19, 2021
🌐
Mozilla
developer.mozilla.org β€Ί en-US β€Ί docs β€Ί Web β€Ί JavaScript
JavaScript | MDN
JavaScript (JS) is a lightweight interpreted (or just-in-time compiled) programming language with first-class functions. While it is most well-known as the scripting language for Web pages, many non-browser environments also use it, such as Node.js, Apache CouchDB and Adobe Acrobat.
Top answer
1 of 11
1992

In Python, the 'null' object is the singleton None.

To check if something is None, use the is identity operator:

if foo is None:
    ...
2 of 11
266

None, Python's null?

There's no null in Python; instead there's None. As stated already, the most accurate way to test that something has been given None as a value is to use the is identity operator, which tests that two variables refer to the same object.

>>> foo is None
True
>>> foo = 'bar'
>>> foo is None
False

The basics

There is and can only be one None

None is the sole instance of the class NoneType and any further attempts at instantiating that class will return the same object, which makes None a singleton. Newcomers to Python often see error messages that mention NoneType and wonder what it is. It's my personal opinion that these messages could simply just mention None by name because, as we'll see shortly, None leaves little room to ambiguity. So if you see some TypeError message that mentions that NoneType can't do this or can't do that, just know that it's simply the one None that was being used in a way that it can't.

Also, None is a built-in constant. As soon as you start Python, it's available to use from everywhere, whether in module, class, or function. NoneType by contrast is not, you'd need to get a reference to it first by querying None for its class.

>>> NoneType
NameError: name 'NoneType' is not defined
>>> type(None)
NoneType

You can check None's uniqueness with Python's identity function id(). It returns the unique number assigned to an object, each object has one. If the id of two variables is the same, then they point in fact to the same object.

>>> NoneType = type(None)
>>> id(None)
10748000
>>> my_none = NoneType()
>>> id(my_none)
10748000
>>> another_none = NoneType()
>>> id(another_none)
10748000
>>> def function_that_does_nothing(): pass
>>> return_value = function_that_does_nothing()
>>> id(return_value)
10748000

None cannot be overwritten

In much older versions of Python (before 2.4) it was possible to reassign None, but not any more. Not even as a class attribute or in the confines of a function.

# In Python 2.7
>>> class SomeClass(object):
...     def my_fnc(self):
...             self.None = 'foo'
SyntaxError: cannot assign to None
>>> def my_fnc():
        None = 'foo'
SyntaxError: cannot assign to None

# In Python 3.5
>>> class SomeClass:
...     def my_fnc(self):
...             self.None = 'foo'
SyntaxError: invalid syntax
>>> def my_fnc():
        None = 'foo'
SyntaxError: cannot assign to keyword

It's therefore safe to assume that all None references are the same. There isn't any "custom" None.

To test for None use the is operator

When writing code you might be tempted to test for Noneness like this:

if value==None:
    pass

Or to test for falsehood like this

if not value:
    pass

You need to understand the implications and why it's often a good idea to be explicit.

Case 1: testing if a value is None

Why do

value is None

rather than

value==None

?

The first is equivalent to:

id(value)==id(None)

Whereas the expression value==None is in fact applied like this

value.__eq__(None)

If the value really is None then you'll get what you expected.

>>> nothing = function_that_does_nothing()
>>> nothing.__eq__(None)
True

In most common cases the outcome will be the same, but the __eq__() method opens a door that voids any guarantee of accuracy, since it can be overridden in a class to provide special behavior.

Consider this class.

>>> class Empty(object):
...     def __eq__(self, other):
...         return not other

So you try it on None and it works

>>> empty = Empty()
>>> empty==None
True

But then it also works on the empty string

>>> empty==''
True

And yet

>>> ''==None
False
>>> empty is None
False

Case 2: Using None as a boolean

The following two tests

if value:
    # Do something

if not value:
    # Do something

are in fact evaluated as

if bool(value):
    # Do something

if not bool(value):
    # Do something

None is a "falsey", meaning that if cast to a boolean it will return False and if applied the not operator it will return True. Note however that it's not a property unique to None. In addition to False itself, the property is shared by empty lists, tuples, sets, dicts, strings, as well as 0, and all objects from classes that implement the __bool__() magic method to return False.

>>> bool(None)
False
>>> not None
True

>>> bool([])
False
>>> not []
True

>>> class MyFalsey(object):
...     def __bool__(self):
...         return False
>>> f = MyFalsey()
>>> bool(f)
False
>>> not f
True

So when testing for variables in the following way, be extra aware of what you're including or excluding from the test:

def some_function(value=None):
    if not value:
        value = init_value()

In the above, did you mean to call init_value() when the value is set specifically to None, or did you mean that a value set to 0, or the empty string, or an empty list should also trigger the initialization? Like I said, be mindful. As it's often the case, in Python explicit is better than implicit.

None in practice

None used as a signal value

None has a special status in Python. It's a favorite baseline value because many algorithms treat it as an exceptional value. In such scenarios it can be used as a flag to signal that a condition requires some special handling (such as the setting of a default value).

You can assign None to the keyword arguments of a function and then explicitly test for it.

def my_function(value, param=None):
    if param is None:
        # Do something outrageous!

You can return it as the default when trying to get to an object's attribute and then explicitly test for it before doing something special.

value = getattr(some_obj, 'some_attribute', None)
if value is None:
    # do something spectacular!

By default a dictionary's get() method returns None when trying to access a non-existing key:

>>> some_dict = {}
>>> value = some_dict.get('foo')
>>> value is None
True

If you were to try to access it by using the subscript notation a KeyError would be raised

>>> value = some_dict['foo']
KeyError: 'foo'

Likewise if you attempt to pop a non-existing item

>>> value = some_dict.pop('foo')
KeyError: 'foo'

which you can suppress with a default value that is usually set to None

value = some_dict.pop('foo', None)
if value is None:
    # Booom!

None used as both a flag and valid value

The above described uses of None apply when it is not considered a valid value, but more like a signal to do something special. There are situations however where it sometimes matters to know where None came from because even though it's used as a signal it could also be part of the data.

When you query an object for its attribute with getattr(some_obj, 'attribute_name', None) getting back None doesn't tell you if the attribute you were trying to access was set to None or if it was altogether absent from the object. The same situation when accessing a key from a dictionary, like some_dict.get('some_key'), you don't know if some_dict['some_key'] is missing or if it's just set to None. If you need that information, the usual way to handle this is to directly attempt accessing the attribute or key from within a try/except construct:

try:
    # Equivalent to getattr() without specifying a default
    # value = getattr(some_obj, 'some_attribute')
    value = some_obj.some_attribute
    # Now you handle `None` the data here
    if value is None:
        # Do something here because the attribute was set to None
except AttributeError:
    # We're now handling the exceptional situation from here.
    # We could assign None as a default value if required.
    value = None
    # In addition, since we now know that some_obj doesn't have the
    # attribute 'some_attribute' we could do something about that.
    log_something(some_obj)

Similarly with dict:

try:
    value = some_dict['some_key']
    if value is None:
        # Do something here because 'some_key' is set to None
except KeyError:
    # Set a default
    value = None
    # And do something because 'some_key' was missing
    # from the dict.
    log_something(some_dict)

The above two examples show how to handle object and dictionary cases. What about functions? The same thing, but we use the double asterisks keyword argument to that end:

def my_function(**kwargs):
    try:
        value = kwargs['some_key']
        if value is None:
            # Do something because 'some_key' is explicitly
            # set to None
    except KeyError:
        # We assign the default
        value = None
        # And since it's not coming from the caller.
        log_something('did not receive "some_key"')

None used only as a valid value

If you find that your code is littered with the above try/except pattern simply to differentiate between None flags and None data, then just use another test value. There's a pattern where a value that falls outside the set of valid values is inserted as part of the data in a data structure and is used to control and test special conditions (e.g. boundaries, state, etc.). Such a value is called a sentinel and it can be used the way None is used as a signal. It's trivial to create a sentinel in Python.

undefined = object()

The undefined object above is unique and doesn't do much of anything that might be of interest to a program, it's thus an excellent replacement for None as a flag. Some caveats apply, more about that after the code.

With function

def my_function(value, param1=undefined, param2=undefined):
    if param1 is undefined:
        # We know nothing was passed to it, not even None
        log_something('param1 was missing')
        param1 = None


    if param2 is undefined:
        # We got nothing here either
        log_something('param2 was missing')
        param2 = None

With dict

value = some_dict.get('some_key', undefined)
if value is None:
    log_something("'some_key' was set to None")

if value is undefined:
    # We know that the dict didn't have 'some_key'
    log_something("'some_key' was not set at all")
    value = None

With an object

value = getattr(obj, 'some_attribute', undefined)
if value is None:
    log_something("'obj.some_attribute' was set to None")
if value is undefined:
    # We know that there's no obj.some_attribute
    log_something("no 'some_attribute' set on obj")
    value = None

As I mentioned earlier, custom sentinels come with some caveats. First, they're not keywords like None, so Python doesn't protect them. You can overwrite your undefined above at any time, anywhere in the module it's defined, so be careful how you expose and use them. Next, the instance returned by object() is not a singleton. If you make that call 10 times you get 10 different objects. Finally, usage of a sentinel is highly idiosyncratic. A sentinel is specific to the library it's used in and as such its scope should generally be limited to the library's internals. It shouldn't "leak" out. External code should only become aware of it, if their purpose is to extend or supplement the library's API.

🌐
Sentry
sentry.io β€Ί sentry answers β€Ί python β€Ί use the null object in python
Use the null object in Python | Sentry
The Problem How can I use null values in Python? The Solution None is Python's equivalent of null. It is a singleton object of the class NoneType . It is…
🌐
Inductive Automation
forum.inductiveautomation.com β€Ί ignition
Script Editor - If statement - String is NULL - Ignition - Inductive Automation Forum
April 21, 2022 - I tried the python function .isNull() >> doesn’t works. I tried isNull(string_to_compare) >> doesn’t works. Finally I founded: if (string_to_compare == None): else: Trying to help,
Find elsewhere
🌐
Medium
paul-d-chuang.medium.com β€Ί python-better-if-x-none-than-if-not-x-3d6cce484606
Python null check: better if x is not None than if not x | by Paul Chuang | Medium
January 10, 2025 - Python null check: better if x is not None than if not x Use if x is not None for null check There are three ways to do null check in Python. Use if x is not None for null check. Here is why: if x is …
🌐
NxtWave
ccbp.in β€Ί blog β€Ί articles β€Ί null-in-python
Null in Python: Understanding and Handling Null Values
... To check if a variable β€œis None”, use the is operator. The is operator checks for object identity, making it perfect for checking whether a variable refers to None. ... value = None if value is None: print("The value is null (None).") ...
🌐
GeeksforGeeks
geeksforgeeks.org β€Ί python β€Ί null-in-python
Null in Python - GeeksforGeeks
July 23, 2025 - None is commonly used as a placeholder for optional function arguments or variables that have not yet been assigned a value. It helps indicate that the variable is intentionally empty or that the argument is optional, allowing flexibility in handling undefined or default values in Python programs. ... Explanation: x is set to None and the condition checks if x has no value.
🌐
AbsentData
absentdata.com β€Ί home β€Ί articles β€Ί handling nulls in python: a hands-on tutorial
Handling Nulls in Python: A Hands-On Tutorial - AbsentData
October 18, 2023 - # Check if x_variable is None if x_variable is None: print("x_variable is None") else: print("The Value of x_variable is: ", x_variable) # Check if y_variable is None if y_variable is None: print("y_variable is None") else: print("The Value of y_variable is: ", y_variable) This code returns None for x_variable because we did not assign any value to x_variable and print the value of y_variable. ... There are several ways to deal with null in Python.
🌐
Python.org
discuss.python.org β€Ί ideas
Add None coalescing operator in Python - Ideas - Discussions on Python.org
April 19, 2021 - Just like in Javascript there is Nullish coalescing operator(??) for checking for null values, it would be a nice addition to python as python also hasNone . Currently users often check for None with if statement: if foo is not None: return ...
🌐
Apify
docs.apify.com β€Ί api β€Ί v2
Apify API | Apify Documentation
To access the API using Python, we recommend the apify-client PyPI package.
🌐
JSON
json.org
JSON
A value can be a string in double quotes, or a number, or true or false or null, or an object or an array.
🌐
PyPI
pypi.org β€Ί project β€Ί openai
OpenAI Python API library
from openai import OpenAI # Configure the default for all requests: client = OpenAI( # 20 seconds (default is 10 minutes) timeout=20.0, ) # More granular control: client = OpenAI( timeout=httpx.Timeout(60.0, read=5.0, write=10.0, connect=2.0), ) # Override per-request: client.with_options(timeout=5.0).chat.completions.create( messages=[ { "role": "user", "content": "How can I list all files in a directory using Python?", } ], model="gpt-5.2", ) On timeout, an APITimeoutError is thrown. Note that requests that time out are retried twice by default. We use the standard library logging module. You can enable logging by setting the environment variable OPENAI_LOG to info. ... Or to debug for more verbose logging. In an API response, a field may be explicitly null, or missing entirely; in either case, its value is None in this library.
      Β» pip install openai
    
Published Β  Feb 24, 2026
Version Β  2.24.0
🌐
Mistral AI
docs.mistral.ai β€Ί api
API Specs
Prediction|null Β· Enable users to specify an expected completion, optimizing response times by leveraging known or predictable content. number Β· Default Value: 0 Β· The presence_penalty determines how much the model penalizes the repetition of words or phrases.
🌐
Copahost
copahost.com β€Ί home β€Ί null python: the complete guide to null values
Null Python: The Complete Guide to Null Values - Copahost
August 11, 2023 - However, None to indicate the absence of a valid value in a variable, we use o is None to check if a variable is null, we use o None if to return None when needed, and we use o default to define a default value for a variable or object that ...
🌐
GeeksforGeeks
geeksforgeeks.org β€Ί python β€Ί how-to-check-if-variable-is-empty-in-python
How To Check If Variable Is Empty In Python? - GeeksforGeeks
July 23, 2025 - In this example, the code checks if the dictionary variable `my_dict` is set to `None`. If the variable is `None`, it prints "empty variable"; otherwise, it prints "not empty variable," demonstrating a straightforward way to determine whether the dictionary is empty or not.