Warnings¶
Python Warning Control¶
See also
Python warnings
module documentation
The warnings
module in Python provides a way to control how warnings handled within a Python script. It
allows developers to emit warning messages to alert users of potential issues or unexpected behavior in
their code. It is commonly used when a method is marked for deprecation, but can also be applied to warn
about unexpected runtime conditions.
The warnings module provides several functions to create warnings, and other functions to control how they are handled or displayed, including:
warn(message, warning_type=None, stacklevel=1)
:
Generates a warning message. The message
parameter
is the warning message string, warning_type
is the type of warning, and stacklevel
is the number of
stack frames to skip before recording the warning location.
warn_explicit(message, warning_type, filename, lineno, module=None, registry=None, module_globals=None)
:
Generates a warning message with explicit details about the warning location, such as the filename and line number. This is useful when you want to generate warnings for external code or for custom warnings.
filterwarnings(action, message="", category=Warning, module="", lineno=0, append=False)
:
Controls how
warnings are filtered and displayed. The action
parameter can be one of ignore
, always
,
module
, once
, or default
, which specifies how to filter the warning. The message
,
category
, module
, and lineno
parameters are used to identify which specific warnings to filter.
The warnings module also provides a default warning handling mechanism, which displays warning messages
on the console via stderr
. However, script authors can customize the warning handling behavior by
setting the warnings.showwarning
function to a custom function that handles warnings as may be desired.
This mechanism is applied throughout the CSD Python API, giving script authors control over how these warnings are handled.
To throw exceptions whenever a deprecated function is called, for example, the following may be used:
>>> import warnings
>>> warnings.filterwarnings('error', '.*deprecated.*', DeprecationWarning, '.*', 0)
To instead ignore all cases of deprecated functions, use:
>>> warnings.filterwarnings('ignore', '.*deprecated.*', DeprecationWarning, '.*', 0)