blob: 08c0340241aeb51beeee069a016188b7d5f7aa8e [file] [log] [blame]
Guido van Rossum5db5ba12000-12-19 06:01:23 +00001\section{\module{warnings} ---
2 Warning control}
3
4\declaremodule{standard}{warnings}
5\modulesynopsis{Issue warning messages and control their disposition.}
Guido van Rossum5db5ba12000-12-19 06:01:23 +00006\index{warnings}
7
Fred Drake288927f2001-01-04 05:59:37 +00008\versionadded{2.1}
Guido van Rossum5db5ba12000-12-19 06:01:23 +00009
10Warning messages are typically issued in situations where it is useful
11to alert the user of some condition in a program, where that condition
12(normally) doesn't warrant raising an exception and terminating the
13program. For example, one might want to issue a warning when a
14program uses an obsolete module.
15
16Python programmers issue warnings by calling the \function{warn()}
17function defined in this module. (C programmers use
Fred Drake288927f2001-01-04 05:59:37 +000018\cfunction{PyErr_Warn()}; see the
19\citetitle[../api/exceptionHandling.html]{Python/C API Reference
20Manual} for details).
Guido van Rossum5db5ba12000-12-19 06:01:23 +000021
22Warning messages are normally written to \code{sys.stderr}, but their
23disposition can be changed flexibly, from ignoring all warnings to
24turning them into exceptions. The disposition of warnings can vary
25based on the warning category (see below), the text of the warning
26message, and the source location where it is issued. Repetitions of a
27particular warning for the same source location are typically
28suppressed.
29
30There are two stages in warning control: first, each time a warning is
31issued, a determination is made whether a message should be issued or
32not; next, if a message is to be issued, it is formatted and printed
33using a user-settable hook.
34
35The determination whether to issue a warning message is controlled by
36the warning filter, which is a sequence of matching rules and actions.
37Rules can be added to the filter by calling
38\function{filterwarnings()} and reset to its default state by calling
39\function{resetwarnings()}.
40
41The printing of warning messages is done by calling
Raymond Hettinger68804312005-01-01 00:28:46 +000042\function{showwarning()}, which may be overridden; the default
Guido van Rossum5db5ba12000-12-19 06:01:23 +000043implementation of this function formats the message by calling
44\function{formatwarning()}, which is also available for use by custom
45implementations.
46
47
Fred Drake1dea7602000-12-25 06:19:08 +000048\subsection{Warning Categories \label{warning-categories}}
Guido van Rossum5db5ba12000-12-19 06:01:23 +000049
50There are a number of built-in exceptions that represent warning
51categories. This categorization is useful to be able to filter out
52groups of warnings. The following warnings category classes are
53currently defined:
54
Fred Drake288927f2001-01-04 05:59:37 +000055\begin{tableii}{l|l}{exception}{Class}{Description}
Guido van Rossum5db5ba12000-12-19 06:01:23 +000056
57\lineii{Warning}{This is the base class of all warning category
Fred Drakece575ba2001-08-14 21:51:50 +000058classes. It is a subclass of \exception{Exception}.}
Guido van Rossum5db5ba12000-12-19 06:01:23 +000059
60\lineii{UserWarning}{The default category for \function{warn()}.}
61
62\lineii{DeprecationWarning}{Base category for warnings about
63deprecated features.}
64
65\lineii{SyntaxWarning}{Base category for warnings about dubious
66syntactic features.}
67
68\lineii{RuntimeWarning}{Base category for warnings about dubious
69runtime features.}
70
Barry Warsawb8c20a72002-08-14 16:40:54 +000071\lineii{FutureWarning}{Base category for warnings about constructs
72that will change semantically in the future.}
73
Nick Coghlan2bfe3a92006-07-06 13:41:34 +000074\lineii{PendingDeprecationWarning}{Base category for warnings about
75features that will be deprecated in the future (ignored by default).}
76
77\lineii{ImportWarning}{Base category for warnings triggered during the
78process of importing a module (ignored by default).}
Guido van Rossum5db5ba12000-12-19 06:01:23 +000079\end{tableii}
80
81While these are technically built-in exceptions, they are documented
82here, because conceptually they belong to the warnings mechanism.
83
84User code can define additional warning categories by subclassing one
85of the standard warning categories. A warning category must always be
86a subclass of the \exception{Warning} class.
87
88
Fred Drake1dea7602000-12-25 06:19:08 +000089\subsection{The Warnings Filter \label{warning-filter}}
Guido van Rossum5db5ba12000-12-19 06:01:23 +000090
91The warnings filter controls whether warnings are ignored, displayed,
92or turned into errors (raising an exception).
93
94Conceptually, the warnings filter maintains an ordered list of filter
95specifications; any specific warning is matched against each filter
96specification in the list in turn until a match is found; the match
97determines the disposition of the match. Each entry is a tuple of the
98form (\var{action}, \var{message}, \var{category}, \var{module},
99\var{lineno}), where:
100
101\begin{itemize}
102
103\item \var{action} is one of the following strings:
104
Fred Drake288927f2001-01-04 05:59:37 +0000105 \begin{tableii}{l|l}{code}{Value}{Disposition}
Guido van Rossum5db5ba12000-12-19 06:01:23 +0000106
Fred Drake288927f2001-01-04 05:59:37 +0000107 \lineii{"error"}{turn matching warnings into exceptions}
Guido van Rossum5db5ba12000-12-19 06:01:23 +0000108
Fred Drake288927f2001-01-04 05:59:37 +0000109 \lineii{"ignore"}{never print matching warnings}
Guido van Rossum5db5ba12000-12-19 06:01:23 +0000110
Fred Drake288927f2001-01-04 05:59:37 +0000111 \lineii{"always"}{always print matching warnings}
Guido van Rossum5db5ba12000-12-19 06:01:23 +0000112
Fred Drake288927f2001-01-04 05:59:37 +0000113 \lineii{"default"}{print the first occurrence of matching
Guido van Rossum5db5ba12000-12-19 06:01:23 +0000114 warnings for each location where the warning is issued}
115
Fred Drake288927f2001-01-04 05:59:37 +0000116 \lineii{"module"}{print the first occurrence of matching
Guido van Rossum5db5ba12000-12-19 06:01:23 +0000117 warnings for each module where the warning is issued}
118
Fred Drake288927f2001-01-04 05:59:37 +0000119 \lineii{"once"}{print only the first occurrence of matching
Guido van Rossum5db5ba12000-12-19 06:01:23 +0000120 warnings, regardless of location}
121
122 \end{tableii}
123
Andrew M. Kuchlingba375242003-02-06 14:38:45 +0000124\item \var{message} is a string containing a regular expression that
125the warning message must match (the match is compiled to always be
126case-insensitive)
Guido van Rossum5db5ba12000-12-19 06:01:23 +0000127
128\item \var{category} is a class (a subclass of \exception{Warning}) of
129 which the warning category must be a subclass in order to match
130
Andrew M. Kuchlingba375242003-02-06 14:38:45 +0000131\item \var{module} is a string containing a regular expression that the module
132 name must match (the match is compiled to be case-sensitive)
Guido van Rossum5db5ba12000-12-19 06:01:23 +0000133
134\item \var{lineno} is an integer that the line number where the
135 warning occurred must match, or \code{0} to match all line
136 numbers
137
138\end{itemize}
139
140Since the \exception{Warning} class is derived from the built-in
141\exception{Exception} class, to turn a warning into an error we simply
142raise \code{category(message)}.
143
Fred Drake288927f2001-01-04 05:59:37 +0000144The warnings filter is initialized by \programopt{-W} options passed
145to the Python interpreter command line. The interpreter saves the
146arguments for all \programopt{-W} options without interpretation in
Guido van Rossum5db5ba12000-12-19 06:01:23 +0000147\code{sys.warnoptions}; the \module{warnings} module parses these when
148it is first imported (invalid options are ignored, after printing a
149message to \code{sys.stderr}).
150
Nick Coghlan2bfe3a92006-07-06 13:41:34 +0000151The warnings that are ignored by default may be enabled by passing
152 \programopt{-Wd} to the interpreter. This enables default handling
153for all warnings, including those that are normally ignored by
154default. This is particular useful for enabling ImportWarning when
155debugging problems importing a developed package. ImportWarning can
156also be enabled explicitly in Python code using:
157
158\begin{verbatim}
159 warnings.simplefilter('default', ImportWarning)
160\end{verbatim}
161
Guido van Rossum5db5ba12000-12-19 06:01:23 +0000162
Fred Drake1dea7602000-12-25 06:19:08 +0000163\subsection{Available Functions \label{warning-functions}}
Guido van Rossum5db5ba12000-12-19 06:01:23 +0000164
165\begin{funcdesc}{warn}{message\optional{, category\optional{, stacklevel}}}
166Issue a warning, or maybe ignore it or raise an exception. The
167\var{category} argument, if given, must be a warning category class
Walter Dörwaldb25c2b02002-03-21 10:38:40 +0000168(see above); it defaults to \exception{UserWarning}. Alternatively
169\var{message} can be a \exception{Warning} instance, in which case
Neal Norwitze22d3df2002-03-21 12:58:54 +0000170\var{category} will be ignored and \code{message.__class__} will be used.
Walter Dörwaldb25c2b02002-03-21 10:38:40 +0000171In this case the message text will be \code{str(message)}. This function
Guido van Rossum5db5ba12000-12-19 06:01:23 +0000172raises an exception if the particular warning issued is changed
173into an error by the warnings filter see above. The \var{stacklevel}
174argument can be used by wrapper functions written in Python, like
175this:
176
177\begin{verbatim}
178def deprecation(message):
Fred Drakef9816172002-03-12 19:49:31 +0000179 warnings.warn(message, DeprecationWarning, stacklevel=2)
Guido van Rossum5db5ba12000-12-19 06:01:23 +0000180\end{verbatim}
181
182This makes the warning refer to \function{deprecation()}'s caller,
183rather than to the source of \function{deprecation()} itself (since
184the latter would defeat the purpose of the warning message).
185\end{funcdesc}
186
Guido van Rossum56ba72a2001-02-28 23:34:21 +0000187\begin{funcdesc}{warn_explicit}{message, category, filename,
Phillip J. Eby47032112006-04-11 01:07:43 +0000188 lineno\optional{, module\optional{, registry\optional{,
189 module_globals}}}}
Guido van Rossum56ba72a2001-02-28 23:34:21 +0000190This is a low-level interface to the functionality of
191\function{warn()}, passing in explicitly the message, category,
192filename and line number, and optionally the module name and the
193registry (which should be the \code{__warningregistry__} dictionary of
194the module). The module name defaults to the filename with \code{.py}
195stripped; if no registry is passed, the warning is never suppressed.
Walter Dörwaldb25c2b02002-03-21 10:38:40 +0000196\var{message} must be a string and \var{category} a subclass of
197\exception{Warning} or \var{message} may be a \exception{Warning} instance,
198in which case \var{category} will be ignored.
Phillip J. Eby47032112006-04-11 01:07:43 +0000199
200\var{module_globals}, if supplied, should be the global namespace in use
201by the code for which the warning is issued. (This argument is used to
202support displaying source for modules found in zipfiles or other
203non-filesystem import sources, and was added in Python 2.5.)
Guido van Rossum56ba72a2001-02-28 23:34:21 +0000204\end{funcdesc}
205
Guido van Rossum5db5ba12000-12-19 06:01:23 +0000206\begin{funcdesc}{showwarning}{message, category, filename,
207 lineno\optional{, file}}
208Write a warning to a file. The default implementation calls
Tim Peters93ceaea2003-07-01 14:37:59 +0000209\code{formatwarning(\var{message}, \var{category}, \var{filename},
Guido van Rossum5db5ba12000-12-19 06:01:23 +0000210\var{lineno})} and writes the resulting string to \var{file}, which
211defaults to \code{sys.stderr}. You may replace this function with an
212alternative implementation by assigning to
213\code{warnings.showwarning}.
214\end{funcdesc}
215
216\begin{funcdesc}{formatwarning}{message, category, filename, lineno}
217Format a warning the standard way. This returns a string which may
218contain embedded newlines and ends in a newline.
219\end{funcdesc}
220
221\begin{funcdesc}{filterwarnings}{action\optional{,
Fred Drake1dea7602000-12-25 06:19:08 +0000222 message\optional{, category\optional{,
Guido van Rossum77b20f02001-01-14 14:10:18 +0000223 module\optional{, lineno\optional{, append}}}}}}
224Insert an entry into the list of warnings filters. The entry is
225inserted at the front by default; if \var{append} is true, it is
226inserted at the end.
Guido van Rossum5db5ba12000-12-19 06:01:23 +0000227This checks the types of the arguments, compiles the message and
Nick Coghlan2bfe3a92006-07-06 13:41:34 +0000228module regular expressions, and inserts them as a tuple in the
229list of warnings filters. Entries closer to the front of the list
230override entries later in the list, if both match a particular
231warning. Omitted arguments default to a value that matches
232everything.
233\end{funcdesc}
234
235\begin{funcdesc}{simplefilter}{action\optional{,
236 category\optional{,
237 lineno\optional{, append}}}}
238Insert a simple entry into the list of warnings filters. The meaning
239of the function parameters is as for \function{filterwarnings()}, but
240regular expressions are not needed as the filter inserted always
241matches any message in any module as long as the category and line
242number match.
Guido van Rossum5db5ba12000-12-19 06:01:23 +0000243\end{funcdesc}
244
245\begin{funcdesc}{resetwarnings}{}
246Reset the warnings filter. This discards the effect of all previous
Fred Drake288927f2001-01-04 05:59:37 +0000247calls to \function{filterwarnings()}, including that of the
Nick Coghlan2bfe3a92006-07-06 13:41:34 +0000248\programopt{-W} command line options and calls to
249\function{simplefilter()}.
Guido van Rossum5db5ba12000-12-19 06:01:23 +0000250\end{funcdesc}