blob: 25e5db368905b2bba73f565671aefbebbadf3d45 [file] [log] [blame]
Georg Brandl116aa622007-08-15 14:28:22 +00001:mod:`warnings` --- Warning control
2===================================
3
4.. index:: single: warnings
5
6.. module:: warnings
7 :synopsis: Issue warning messages and control their disposition.
8
9
Georg Brandl116aa622007-08-15 14:28:22 +000010Warning messages are typically issued in situations where it is useful to alert
11the user of some condition in a program, where that condition (normally) doesn't
12warrant raising an exception and terminating the program. For example, one
13might want to issue a warning when a program uses an obsolete module.
14
15Python programmers issue warnings by calling the :func:`warn` function defined
16in this module. (C programmers use :cfunc:`PyErr_WarnEx`; see
17:ref:`exceptionhandling` for details).
18
19Warning messages are normally written to ``sys.stderr``, but their disposition
20can be changed flexibly, from ignoring all warnings to turning them into
21exceptions. The disposition of warnings can vary based on the warning category
22(see below), the text of the warning message, and the source location where it
23is issued. Repetitions of a particular warning for the same source location are
24typically suppressed.
25
26There are two stages in warning control: first, each time a warning is issued, a
27determination is made whether a message should be issued or not; next, if a
28message is to be issued, it is formatted and printed using a user-settable hook.
29
30The determination whether to issue a warning message is controlled by the
31warning filter, which is a sequence of matching rules and actions. Rules can be
32added to the filter by calling :func:`filterwarnings` and reset to its default
33state by calling :func:`resetwarnings`.
34
35The printing of warning messages is done by calling :func:`showwarning`, which
36may be overridden; the default implementation of this function formats the
37message by calling :func:`formatwarning`, which is also available for use by
38custom implementations.
39
40
41.. _warning-categories:
42
43Warning Categories
44------------------
45
46There are a number of built-in exceptions that represent warning categories.
47This categorization is useful to be able to filter out groups of warnings. The
48following warnings category classes are currently defined:
49
50+----------------------------------+-----------------------------------------------+
51| Class | Description |
52+==================================+===============================================+
53| :exc:`Warning` | This is the base class of all warning |
54| | category classes. It is a subclass of |
55| | :exc:`Exception`. |
56+----------------------------------+-----------------------------------------------+
57| :exc:`UserWarning` | The default category for :func:`warn`. |
58+----------------------------------+-----------------------------------------------+
59| :exc:`DeprecationWarning` | Base category for warnings about deprecated |
Benjamin Peterson7ab4b8d2010-06-28 00:01:59 +000060| | features (ignored by default). |
Georg Brandl116aa622007-08-15 14:28:22 +000061+----------------------------------+-----------------------------------------------+
62| :exc:`SyntaxWarning` | Base category for warnings about dubious |
63| | syntactic features. |
64+----------------------------------+-----------------------------------------------+
65| :exc:`RuntimeWarning` | Base category for warnings about dubious |
66| | runtime features. |
67+----------------------------------+-----------------------------------------------+
68| :exc:`FutureWarning` | Base category for warnings about constructs |
69| | that will change semantically in the future. |
70+----------------------------------+-----------------------------------------------+
71| :exc:`PendingDeprecationWarning` | Base category for warnings about features |
72| | that will be deprecated in the future |
73| | (ignored by default). |
74+----------------------------------+-----------------------------------------------+
75| :exc:`ImportWarning` | Base category for warnings triggered during |
76| | the process of importing a module (ignored by |
77| | default). |
78+----------------------------------+-----------------------------------------------+
79| :exc:`UnicodeWarning` | Base category for warnings related to |
80| | Unicode. |
81+----------------------------------+-----------------------------------------------+
Guido van Rossum98297ee2007-11-06 21:34:58 +000082| :exc:`BytesWarning` | Base category for warnings related to |
83| | :class:`bytes` and :class:`buffer`. |
84+----------------------------------+-----------------------------------------------+
85
Georg Brandl116aa622007-08-15 14:28:22 +000086
87While these are technically built-in exceptions, they are documented here,
88because conceptually they belong to the warnings mechanism.
89
90User code can define additional warning categories by subclassing one of the
91standard warning categories. A warning category must always be a subclass of
92the :exc:`Warning` class.
93
Benjamin Peterson56894b52010-06-28 00:16:12 +000094.. versionchanged:: 3.2
Benjamin Peterson7ab4b8d2010-06-28 00:01:59 +000095 :exc:`DeprecationWarning` is ignored by default.
96
Georg Brandl116aa622007-08-15 14:28:22 +000097
98.. _warning-filter:
99
100The Warnings Filter
101-------------------
102
103The warnings filter controls whether warnings are ignored, displayed, or turned
104into errors (raising an exception).
105
106Conceptually, the warnings filter maintains an ordered list of filter
107specifications; any specific warning is matched against each filter
108specification in the list in turn until a match is found; the match determines
109the disposition of the match. Each entry is a tuple of the form (*action*,
110*message*, *category*, *module*, *lineno*), where:
111
112* *action* is one of the following strings:
113
114 +---------------+----------------------------------------------+
115 | Value | Disposition |
116 +===============+==============================================+
117 | ``"error"`` | turn matching warnings into exceptions |
118 +---------------+----------------------------------------------+
119 | ``"ignore"`` | never print matching warnings |
120 +---------------+----------------------------------------------+
121 | ``"always"`` | always print matching warnings |
122 +---------------+----------------------------------------------+
123 | ``"default"`` | print the first occurrence of matching |
124 | | warnings for each location where the warning |
125 | | is issued |
126 +---------------+----------------------------------------------+
127 | ``"module"`` | print the first occurrence of matching |
128 | | warnings for each module where the warning |
129 | | is issued |
130 +---------------+----------------------------------------------+
131 | ``"once"`` | print only the first occurrence of matching |
132 | | warnings, regardless of location |
133 +---------------+----------------------------------------------+
134
135* *message* is a string containing a regular expression that the warning message
Benjamin Peterson8719ad52009-09-11 22:24:02 +0000136 must match (the match is compiled to always be case-insensitive).
Georg Brandl116aa622007-08-15 14:28:22 +0000137
138* *category* is a class (a subclass of :exc:`Warning`) of which the warning
Benjamin Peterson8719ad52009-09-11 22:24:02 +0000139 category must be a subclass in order to match.
Georg Brandl116aa622007-08-15 14:28:22 +0000140
141* *module* is a string containing a regular expression that the module name must
Benjamin Peterson8719ad52009-09-11 22:24:02 +0000142 match (the match is compiled to be case-sensitive).
Georg Brandl116aa622007-08-15 14:28:22 +0000143
144* *lineno* is an integer that the line number where the warning occurred must
Benjamin Peterson8719ad52009-09-11 22:24:02 +0000145 match, or ``0`` to match all line numbers.
Georg Brandl116aa622007-08-15 14:28:22 +0000146
147Since the :exc:`Warning` class is derived from the built-in :exc:`Exception`
148class, to turn a warning into an error we simply raise ``category(message)``.
149
150The warnings filter is initialized by :option:`-W` options passed to the Python
151interpreter command line. The interpreter saves the arguments for all
152:option:`-W` options without interpretation in ``sys.warnoptions``; the
153:mod:`warnings` module parses these when it is first imported (invalid options
154are ignored, after printing a message to ``sys.stderr``).
155
Georg Brandl116aa622007-08-15 14:28:22 +0000156
Brett Cannon1cd02472008-09-09 01:52:27 +0000157.. _warning-suppress:
158
159Temporarily Suppressing Warnings
160--------------------------------
161
Benjamin Petersonfcf5d632008-10-16 23:24:44 +0000162If you are using code that you know will raise a warning, such as a deprecated
163function, but do not want to see the warning, then it is possible to suppress
164the warning using the :class:`catch_warnings` context manager::
Brett Cannon1cd02472008-09-09 01:52:27 +0000165
166 import warnings
167
168 def fxn():
169 warnings.warn("deprecated", DeprecationWarning)
170
171 with warnings.catch_warnings():
172 warnings.simplefilter("ignore")
173 fxn()
174
175While within the context manager all warnings will simply be ignored. This
176allows you to use known-deprecated code without having to see the warning while
177not suppressing the warning for other code that might not be aware of its use
Benjamin Peterson08bf91c2010-04-11 16:12:57 +0000178of deprecated code. Note: this can only be guaranteed in a single-threaded
179application. If two or more threads use the :class:`catch_warnings` context
180manager at the same time, the behavior is undefined.
181
Brett Cannon1cd02472008-09-09 01:52:27 +0000182
183
184.. _warning-testing:
185
186Testing Warnings
187----------------
188
189To test warnings raised by code, use the :class:`catch_warnings` context
190manager. With it you can temporarily mutate the warnings filter to facilitate
191your testing. For instance, do the following to capture all raised warnings to
192check::
193
194 import warnings
195
196 def fxn():
197 warnings.warn("deprecated", DeprecationWarning)
198
199 with warnings.catch_warnings(record=True) as w:
200 # Cause all warnings to always be triggered.
201 warnings.simplefilter("always")
202 # Trigger a warning.
203 fxn()
204 # Verify some things
205 assert len(w) == 1
Alexandre Vassalotti6d3dfc32009-07-29 19:54:39 +0000206 assert issubclass(w[-1].category, DeprecationWarning)
Brett Cannon1cd02472008-09-09 01:52:27 +0000207 assert "deprecated" in str(w[-1].message)
208
209One can also cause all warnings to be exceptions by using ``error`` instead of
210``always``. One thing to be aware of is that if a warning has already been
211raised because of a ``once``/``default`` rule, then no matter what filters are
212set the warning will not be seen again unless the warnings registry related to
213the warning has been cleared.
214
215Once the context manager exits, the warnings filter is restored to its state
216when the context was entered. This prevents tests from changing the warnings
217filter in unexpected ways between tests and leading to indeterminate test
Benjamin Petersonfcf5d632008-10-16 23:24:44 +0000218results. The :func:`showwarning` function in the module is also restored to
Benjamin Peterson08bf91c2010-04-11 16:12:57 +0000219its original value. Note: this can only be guaranteed in a single-threaded
220application. If two or more threads use the :class:`catch_warnings` context
221manager at the same time, the behavior is undefined.
Benjamin Petersonfcf5d632008-10-16 23:24:44 +0000222
223When testing multiple operations that raise the same kind of warning, it
224is important to test them in a manner that confirms each operation is raising
225a new warning (e.g. set warnings to be raised as exceptions and check the
226operations raise exceptions, check that the length of the warning list
227continues to increase after each operation, or else delete the previous
228entries from the warnings list before each new operation).
Brett Cannon1cd02472008-09-09 01:52:27 +0000229
230
Benjamin Peterson7ab4b8d2010-06-28 00:01:59 +0000231Updating Code For New Versions of Python
232----------------------------------------
233
234Warnings that are only of interest to the developer are ignored by default. As
235such you should make sure to test your code with typically ignored warnings
236made visible. You can do this from the command-line by passing :option:`-Wd`
237to the interpreter (this is shorthand for :option:`-W default`). This enables
238default handling for all warnings, including those that are ignored by default.
239To change what action is taken for encountered warnings you simply change what
240argument is passed to :option:`-W`, e.g. :option:`-W error`. See the
241:option:`-W` flag for more details on what is possible.
242
243To programmatically do the same as :option:`-Wd`, use::
244
245 warnings.simplefilter('default')
246
247Make sure to execute this code as soon as possible. This prevents the
248registering of what warnings have been raised from unexpectedly influencing how
249future warnings are treated.
250
251Having certain warnings ignored by default is done to prevent a user from
252seeing warnings that are only of interest to the developer. As you do not
253necessarily have control over what interpreter a user uses to run their code,
254it is possible that a new version of Python will be released between your
255release cycles. The new interpreter release could trigger new warnings in your
256code that were not there in an older interpreter, e.g.
257:exc:`DeprecationWarning` for a module that you are using. While you as a
258developer want to be notified that your code is using a deprecated module, to a
259user this information is essentially noise and provides no benefit to them.
260
261
Georg Brandl116aa622007-08-15 14:28:22 +0000262.. _warning-functions:
263
264Available Functions
265-------------------
266
267
Georg Brandl7f01a132009-09-16 15:58:14 +0000268.. function:: warn(message, category=None, stacklevel=1)
Georg Brandl116aa622007-08-15 14:28:22 +0000269
270 Issue a warning, or maybe ignore it or raise an exception. The *category*
271 argument, if given, must be a warning category class (see above); it defaults to
272 :exc:`UserWarning`. Alternatively *message* can be a :exc:`Warning` instance,
273 in which case *category* will be ignored and ``message.__class__`` will be used.
274 In this case the message text will be ``str(message)``. This function raises an
275 exception if the particular warning issued is changed into an error by the
276 warnings filter see above. The *stacklevel* argument can be used by wrapper
277 functions written in Python, like this::
278
279 def deprecation(message):
280 warnings.warn(message, DeprecationWarning, stacklevel=2)
281
282 This makes the warning refer to :func:`deprecation`'s caller, rather than to the
283 source of :func:`deprecation` itself (since the latter would defeat the purpose
284 of the warning message).
285
286
Georg Brandl7f01a132009-09-16 15:58:14 +0000287.. function:: warn_explicit(message, category, filename, lineno, module=None, registry=None, module_globals=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000288
289 This is a low-level interface to the functionality of :func:`warn`, passing in
290 explicitly the message, category, filename and line number, and optionally the
291 module name and the registry (which should be the ``__warningregistry__``
292 dictionary of the module). The module name defaults to the filename with
293 ``.py`` stripped; if no registry is passed, the warning is never suppressed.
294 *message* must be a string and *category* a subclass of :exc:`Warning` or
295 *message* may be a :exc:`Warning` instance, in which case *category* will be
296 ignored.
297
298 *module_globals*, if supplied, should be the global namespace in use by the code
299 for which the warning is issued. (This argument is used to support displaying
Christian Heimes3279b5d2007-12-09 15:58:13 +0000300 source for modules found in zipfiles or other non-filesystem import
301 sources).
Georg Brandl116aa622007-08-15 14:28:22 +0000302
303
Georg Brandl7f01a132009-09-16 15:58:14 +0000304.. function:: showwarning(message, category, filename, lineno, file=None, line=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000305
306 Write a warning to a file. The default implementation calls
Christian Heimes33fe8092008-04-13 13:53:33 +0000307 ``formatwarning(message, category, filename, lineno, line)`` and writes the
308 resulting string to *file*, which defaults to ``sys.stderr``. You may replace
309 this function with an alternative implementation by assigning to
Georg Brandl116aa622007-08-15 14:28:22 +0000310 ``warnings.showwarning``.
Alexandre Vassalottia79e33e2008-05-15 22:51:26 +0000311 *line* is a line of source code to be included in the warning
Georg Brandl48310cd2009-01-03 21:18:54 +0000312 message; if *line* is not supplied, :func:`showwarning` will
Alexandre Vassalottia79e33e2008-05-15 22:51:26 +0000313 try to read the line specified by *filename* and *lineno*.
Georg Brandl116aa622007-08-15 14:28:22 +0000314
315
Georg Brandl7f01a132009-09-16 15:58:14 +0000316.. function:: formatwarning(message, category, filename, lineno, line=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000317
Benjamin Peterson8719ad52009-09-11 22:24:02 +0000318 Format a warning the standard way. This returns a string which may contain
319 embedded newlines and ends in a newline. *line* is a line of source code to
320 be included in the warning message; if *line* is not supplied,
321 :func:`formatwarning` will try to read the line specified by *filename* and
322 *lineno*.
Georg Brandl116aa622007-08-15 14:28:22 +0000323
324
Georg Brandl7f01a132009-09-16 15:58:14 +0000325.. function:: filterwarnings(action, message='', category=Warning, module='', lineno=0, append=False)
Georg Brandl116aa622007-08-15 14:28:22 +0000326
Benjamin Peterson8719ad52009-09-11 22:24:02 +0000327 Insert an entry into the list of :ref:`warnings filter specifications
328 <warning-filter>`. The entry is inserted at the front by default; if
329 *append* is true, it is inserted at the end. This checks the types of the
330 arguments, compiles the *message* and *module* regular expressions, and
331 inserts them as a tuple in the list of warnings filters. Entries closer to
Georg Brandl116aa622007-08-15 14:28:22 +0000332 the front of the list override entries later in the list, if both match a
333 particular warning. Omitted arguments default to a value that matches
334 everything.
335
336
Georg Brandl7f01a132009-09-16 15:58:14 +0000337.. function:: simplefilter(action, category=Warning, lineno=0, append=False)
Georg Brandl116aa622007-08-15 14:28:22 +0000338
Benjamin Peterson8719ad52009-09-11 22:24:02 +0000339 Insert a simple entry into the list of :ref:`warnings filter specifications
340 <warning-filter>`. The meaning of the function parameters is as for
341 :func:`filterwarnings`, but regular expressions are not needed as the filter
342 inserted always matches any message in any module as long as the category and
343 line number match.
Georg Brandl116aa622007-08-15 14:28:22 +0000344
345
346.. function:: resetwarnings()
347
348 Reset the warnings filter. This discards the effect of all previous calls to
349 :func:`filterwarnings`, including that of the :option:`-W` command line options
350 and calls to :func:`simplefilter`.
351
Brett Cannonec92e182008-09-02 02:46:59 +0000352
Brett Cannon1cd02472008-09-09 01:52:27 +0000353Available Context Managers
354--------------------------
Brett Cannonec92e182008-09-02 02:46:59 +0000355
Georg Brandl7f01a132009-09-16 15:58:14 +0000356.. class:: catch_warnings(\*, record=False, module=None)
Brett Cannonec92e182008-09-02 02:46:59 +0000357
Benjamin Petersonfcf5d632008-10-16 23:24:44 +0000358 A context manager that copies and, upon exit, restores the warnings filter
359 and the :func:`showwarning` function.
360 If the *record* argument is :const:`False` (the default) the context manager
361 returns :class:`None` on entry. If *record* is :const:`True`, a list is
362 returned that is progressively populated with objects as seen by a custom
363 :func:`showwarning` function (which also suppresses output to ``sys.stdout``).
364 Each object in the list has attributes with the same names as the arguments to
365 :func:`showwarning`.
Brett Cannonec92e182008-09-02 02:46:59 +0000366
Brett Cannon1cd02472008-09-09 01:52:27 +0000367 The *module* argument takes a module that will be used instead of the
368 module returned when you import :mod:`warnings` whose filter will be
Benjamin Petersonfcf5d632008-10-16 23:24:44 +0000369 protected. This argument exists primarily for testing the :mod:`warnings`
Brett Cannon1cd02472008-09-09 01:52:27 +0000370 module itself.
Benjamin Peterson08bf91c2010-04-11 16:12:57 +0000371
372 .. note::
373
374 The :class:`catch_warnings` manager works by replacing and
375 then later restoring the module's
376 :func:`showwarning` function and internal list of filter
377 specifications. This means the context manager is modifying
378 global state and therefore is not thread-safe.