[2] | 1 | .. highlightlang:: c
|
---|
| 2 |
|
---|
| 3 |
|
---|
| 4 | .. _api-intro:
|
---|
| 5 |
|
---|
| 6 | ************
|
---|
| 7 | Introduction
|
---|
| 8 | ************
|
---|
| 9 |
|
---|
| 10 | The Application Programmer's Interface to Python gives C and C++ programmers
|
---|
| 11 | access to the Python interpreter at a variety of levels. The API is equally
|
---|
| 12 | usable from C++, but for brevity it is generally referred to as the Python/C
|
---|
| 13 | API. There are two fundamentally different reasons for using the Python/C API.
|
---|
| 14 | The first reason is to write *extension modules* for specific purposes; these
|
---|
| 15 | are C modules that extend the Python interpreter. This is probably the most
|
---|
| 16 | common use. The second reason is to use Python as a component in a larger
|
---|
| 17 | application; this technique is generally referred to as :dfn:`embedding` Python
|
---|
| 18 | in an application.
|
---|
| 19 |
|
---|
| 20 | Writing an extension module is a relatively well-understood process, where a
|
---|
| 21 | "cookbook" approach works well. There are several tools that automate the
|
---|
| 22 | process to some extent. While people have embedded Python in other
|
---|
| 23 | applications since its early existence, the process of embedding Python is less
|
---|
| 24 | straightforward than writing an extension.
|
---|
| 25 |
|
---|
| 26 | Many API functions are useful independent of whether you're embedding or
|
---|
| 27 | extending Python; moreover, most applications that embed Python will need to
|
---|
| 28 | provide a custom extension as well, so it's probably a good idea to become
|
---|
| 29 | familiar with writing an extension before attempting to embed Python in a real
|
---|
| 30 | application.
|
---|
| 31 |
|
---|
| 32 |
|
---|
| 33 | .. _api-includes:
|
---|
| 34 |
|
---|
| 35 | Include Files
|
---|
| 36 | =============
|
---|
| 37 |
|
---|
| 38 | All function, type and macro definitions needed to use the Python/C API are
|
---|
| 39 | included in your code by the following line::
|
---|
| 40 |
|
---|
| 41 | #include "Python.h"
|
---|
| 42 |
|
---|
| 43 | This implies inclusion of the following standard headers: ``<stdio.h>``,
|
---|
[391] | 44 | ``<string.h>``, ``<errno.h>``, ``<limits.h>``, ``<assert.h>`` and ``<stdlib.h>``
|
---|
| 45 | (if available).
|
---|
[2] | 46 |
|
---|
| 47 | .. note::
|
---|
| 48 |
|
---|
| 49 | Since Python may define some pre-processor definitions which affect the standard
|
---|
| 50 | headers on some systems, you *must* include :file:`Python.h` before any standard
|
---|
| 51 | headers are included.
|
---|
| 52 |
|
---|
| 53 | All user visible names defined by Python.h (except those defined by the included
|
---|
| 54 | standard headers) have one of the prefixes ``Py`` or ``_Py``. Names beginning
|
---|
| 55 | with ``_Py`` are for internal use by the Python implementation and should not be
|
---|
| 56 | used by extension writers. Structure member names do not have a reserved prefix.
|
---|
| 57 |
|
---|
| 58 | **Important:** user code should never define names that begin with ``Py`` or
|
---|
| 59 | ``_Py``. This confuses the reader, and jeopardizes the portability of the user
|
---|
| 60 | code to future Python versions, which may define additional names beginning with
|
---|
| 61 | one of these prefixes.
|
---|
| 62 |
|
---|
| 63 | The header files are typically installed with Python. On Unix, these are
|
---|
| 64 | located in the directories :file:`{prefix}/include/pythonversion/` and
|
---|
| 65 | :file:`{exec_prefix}/include/pythonversion/`, where :envvar:`prefix` and
|
---|
| 66 | :envvar:`exec_prefix` are defined by the corresponding parameters to Python's
|
---|
| 67 | :program:`configure` script and *version* is ``sys.version[:3]``. On Windows,
|
---|
| 68 | the headers are installed in :file:`{prefix}/include`, where :envvar:`prefix` is
|
---|
| 69 | the installation directory specified to the installer.
|
---|
| 70 |
|
---|
| 71 | To include the headers, place both directories (if different) on your compiler's
|
---|
| 72 | search path for includes. Do *not* place the parent directories on the search
|
---|
| 73 | path and then use ``#include <pythonX.Y/Python.h>``; this will break on
|
---|
| 74 | multi-platform builds since the platform independent headers under
|
---|
| 75 | :envvar:`prefix` include the platform specific headers from
|
---|
| 76 | :envvar:`exec_prefix`.
|
---|
| 77 |
|
---|
| 78 | C++ users should note that though the API is defined entirely using C, the
|
---|
| 79 | header files do properly declare the entry points to be ``extern "C"``, so there
|
---|
| 80 | is no need to do anything special to use the API from C++.
|
---|
| 81 |
|
---|
| 82 |
|
---|
| 83 | .. _api-objects:
|
---|
| 84 |
|
---|
| 85 | Objects, Types and Reference Counts
|
---|
| 86 | ===================================
|
---|
| 87 |
|
---|
| 88 | .. index:: object: type
|
---|
| 89 |
|
---|
| 90 | Most Python/C API functions have one or more arguments as well as a return value
|
---|
[391] | 91 | of type :c:type:`PyObject\*`. This type is a pointer to an opaque data type
|
---|
[2] | 92 | representing an arbitrary Python object. Since all Python object types are
|
---|
| 93 | treated the same way by the Python language in most situations (e.g.,
|
---|
| 94 | assignments, scope rules, and argument passing), it is only fitting that they
|
---|
| 95 | should be represented by a single C type. Almost all Python objects live on the
|
---|
| 96 | heap: you never declare an automatic or static variable of type
|
---|
[391] | 97 | :c:type:`PyObject`, only pointer variables of type :c:type:`PyObject\*` can be
|
---|
[2] | 98 | declared. The sole exception are the type objects; since these must never be
|
---|
[391] | 99 | deallocated, they are typically static :c:type:`PyTypeObject` objects.
|
---|
[2] | 100 |
|
---|
| 101 | All Python objects (even Python integers) have a :dfn:`type` and a
|
---|
| 102 | :dfn:`reference count`. An object's type determines what kind of object it is
|
---|
| 103 | (e.g., an integer, a list, or a user-defined function; there are many more as
|
---|
| 104 | explained in :ref:`types`). For each of the well-known types there is a macro
|
---|
| 105 | to check whether an object is of that type; for instance, ``PyList_Check(a)`` is
|
---|
| 106 | true if (and only if) the object pointed to by *a* is a Python list.
|
---|
| 107 |
|
---|
| 108 |
|
---|
| 109 | .. _api-refcounts:
|
---|
| 110 |
|
---|
| 111 | Reference Counts
|
---|
| 112 | ----------------
|
---|
| 113 |
|
---|
| 114 | The reference count is important because today's computers have a finite (and
|
---|
| 115 | often severely limited) memory size; it counts how many different places there
|
---|
| 116 | are that have a reference to an object. Such a place could be another object,
|
---|
| 117 | or a global (or static) C variable, or a local variable in some C function.
|
---|
| 118 | When an object's reference count becomes zero, the object is deallocated. If
|
---|
| 119 | it contains references to other objects, their reference count is decremented.
|
---|
| 120 | Those other objects may be deallocated in turn, if this decrement makes their
|
---|
| 121 | reference count become zero, and so on. (There's an obvious problem with
|
---|
| 122 | objects that reference each other here; for now, the solution is "don't do
|
---|
| 123 | that.")
|
---|
| 124 |
|
---|
| 125 | .. index::
|
---|
| 126 | single: Py_INCREF()
|
---|
| 127 | single: Py_DECREF()
|
---|
| 128 |
|
---|
| 129 | Reference counts are always manipulated explicitly. The normal way is to use
|
---|
[391] | 130 | the macro :c:func:`Py_INCREF` to increment an object's reference count by one,
|
---|
| 131 | and :c:func:`Py_DECREF` to decrement it by one. The :c:func:`Py_DECREF` macro
|
---|
[2] | 132 | is considerably more complex than the incref one, since it must check whether
|
---|
| 133 | the reference count becomes zero and then cause the object's deallocator to be
|
---|
| 134 | called. The deallocator is a function pointer contained in the object's type
|
---|
| 135 | structure. The type-specific deallocator takes care of decrementing the
|
---|
| 136 | reference counts for other objects contained in the object if this is a compound
|
---|
| 137 | object type, such as a list, as well as performing any additional finalization
|
---|
| 138 | that's needed. There's no chance that the reference count can overflow; at
|
---|
| 139 | least as many bits are used to hold the reference count as there are distinct
|
---|
| 140 | memory locations in virtual memory (assuming ``sizeof(Py_ssize_t) >= sizeof(void*)``).
|
---|
| 141 | Thus, the reference count increment is a simple operation.
|
---|
| 142 |
|
---|
| 143 | It is not necessary to increment an object's reference count for every local
|
---|
| 144 | variable that contains a pointer to an object. In theory, the object's
|
---|
| 145 | reference count goes up by one when the variable is made to point to it and it
|
---|
| 146 | goes down by one when the variable goes out of scope. However, these two
|
---|
| 147 | cancel each other out, so at the end the reference count hasn't changed. The
|
---|
| 148 | only real reason to use the reference count is to prevent the object from being
|
---|
| 149 | deallocated as long as our variable is pointing to it. If we know that there
|
---|
| 150 | is at least one other reference to the object that lives at least as long as
|
---|
| 151 | our variable, there is no need to increment the reference count temporarily.
|
---|
| 152 | An important situation where this arises is in objects that are passed as
|
---|
| 153 | arguments to C functions in an extension module that are called from Python;
|
---|
| 154 | the call mechanism guarantees to hold a reference to every argument for the
|
---|
| 155 | duration of the call.
|
---|
| 156 |
|
---|
| 157 | However, a common pitfall is to extract an object from a list and hold on to it
|
---|
| 158 | for a while without incrementing its reference count. Some other operation might
|
---|
| 159 | conceivably remove the object from the list, decrementing its reference count
|
---|
| 160 | and possible deallocating it. The real danger is that innocent-looking
|
---|
| 161 | operations may invoke arbitrary Python code which could do this; there is a code
|
---|
[391] | 162 | path which allows control to flow back to the user from a :c:func:`Py_DECREF`, so
|
---|
[2] | 163 | almost any operation is potentially dangerous.
|
---|
| 164 |
|
---|
| 165 | A safe approach is to always use the generic operations (functions whose name
|
---|
| 166 | begins with ``PyObject_``, ``PyNumber_``, ``PySequence_`` or ``PyMapping_``).
|
---|
| 167 | These operations always increment the reference count of the object they return.
|
---|
[391] | 168 | This leaves the caller with the responsibility to call :c:func:`Py_DECREF` when
|
---|
[2] | 169 | they are done with the result; this soon becomes second nature.
|
---|
| 170 |
|
---|
| 171 |
|
---|
| 172 | .. _api-refcountdetails:
|
---|
| 173 |
|
---|
| 174 | Reference Count Details
|
---|
| 175 | ^^^^^^^^^^^^^^^^^^^^^^^
|
---|
| 176 |
|
---|
| 177 | The reference count behavior of functions in the Python/C API is best explained
|
---|
| 178 | in terms of *ownership of references*. Ownership pertains to references, never
|
---|
| 179 | to objects (objects are not owned: they are always shared). "Owning a
|
---|
| 180 | reference" means being responsible for calling Py_DECREF on it when the
|
---|
| 181 | reference is no longer needed. Ownership can also be transferred, meaning that
|
---|
| 182 | the code that receives ownership of the reference then becomes responsible for
|
---|
[391] | 183 | eventually decref'ing it by calling :c:func:`Py_DECREF` or :c:func:`Py_XDECREF`
|
---|
[2] | 184 | when it's no longer needed---or passing on this responsibility (usually to its
|
---|
| 185 | caller). When a function passes ownership of a reference on to its caller, the
|
---|
| 186 | caller is said to receive a *new* reference. When no ownership is transferred,
|
---|
| 187 | the caller is said to *borrow* the reference. Nothing needs to be done for a
|
---|
| 188 | borrowed reference.
|
---|
| 189 |
|
---|
| 190 | Conversely, when a calling function passes in a reference to an object, there
|
---|
| 191 | are two possibilities: the function *steals* a reference to the object, or it
|
---|
| 192 | does not. *Stealing a reference* means that when you pass a reference to a
|
---|
| 193 | function, that function assumes that it now owns that reference, and you are not
|
---|
| 194 | responsible for it any longer.
|
---|
| 195 |
|
---|
| 196 | .. index::
|
---|
| 197 | single: PyList_SetItem()
|
---|
| 198 | single: PyTuple_SetItem()
|
---|
| 199 |
|
---|
| 200 | Few functions steal references; the two notable exceptions are
|
---|
[391] | 201 | :c:func:`PyList_SetItem` and :c:func:`PyTuple_SetItem`, which steal a reference
|
---|
[2] | 202 | to the item (but not to the tuple or list into which the item is put!). These
|
---|
| 203 | functions were designed to steal a reference because of a common idiom for
|
---|
| 204 | populating a tuple or list with newly created objects; for example, the code to
|
---|
| 205 | create the tuple ``(1, 2, "three")`` could look like this (forgetting about
|
---|
| 206 | error handling for the moment; a better way to code this is shown below)::
|
---|
| 207 |
|
---|
| 208 | PyObject *t;
|
---|
| 209 |
|
---|
| 210 | t = PyTuple_New(3);
|
---|
| 211 | PyTuple_SetItem(t, 0, PyInt_FromLong(1L));
|
---|
| 212 | PyTuple_SetItem(t, 1, PyInt_FromLong(2L));
|
---|
| 213 | PyTuple_SetItem(t, 2, PyString_FromString("three"));
|
---|
| 214 |
|
---|
[391] | 215 | Here, :c:func:`PyInt_FromLong` returns a new reference which is immediately
|
---|
| 216 | stolen by :c:func:`PyTuple_SetItem`. When you want to keep using an object
|
---|
| 217 | although the reference to it will be stolen, use :c:func:`Py_INCREF` to grab
|
---|
[2] | 218 | another reference before calling the reference-stealing function.
|
---|
| 219 |
|
---|
[391] | 220 | Incidentally, :c:func:`PyTuple_SetItem` is the *only* way to set tuple items;
|
---|
| 221 | :c:func:`PySequence_SetItem` and :c:func:`PyObject_SetItem` refuse to do this
|
---|
[2] | 222 | since tuples are an immutable data type. You should only use
|
---|
[391] | 223 | :c:func:`PyTuple_SetItem` for tuples that you are creating yourself.
|
---|
[2] | 224 |
|
---|
[391] | 225 | Equivalent code for populating a list can be written using :c:func:`PyList_New`
|
---|
| 226 | and :c:func:`PyList_SetItem`.
|
---|
[2] | 227 |
|
---|
| 228 | However, in practice, you will rarely use these ways of creating and populating
|
---|
[391] | 229 | a tuple or list. There's a generic function, :c:func:`Py_BuildValue`, that can
|
---|
[2] | 230 | create most common objects from C values, directed by a :dfn:`format string`.
|
---|
| 231 | For example, the above two blocks of code could be replaced by the following
|
---|
| 232 | (which also takes care of the error checking)::
|
---|
| 233 |
|
---|
| 234 | PyObject *tuple, *list;
|
---|
| 235 |
|
---|
| 236 | tuple = Py_BuildValue("(iis)", 1, 2, "three");
|
---|
| 237 | list = Py_BuildValue("[iis]", 1, 2, "three");
|
---|
| 238 |
|
---|
[391] | 239 | It is much more common to use :c:func:`PyObject_SetItem` and friends with items
|
---|
[2] | 240 | whose references you are only borrowing, like arguments that were passed in to
|
---|
| 241 | the function you are writing. In that case, their behaviour regarding reference
|
---|
| 242 | counts is much saner, since you don't have to increment a reference count so you
|
---|
| 243 | can give a reference away ("have it be stolen"). For example, this function
|
---|
| 244 | sets all items of a list (actually, any mutable sequence) to a given item::
|
---|
| 245 |
|
---|
| 246 | int
|
---|
| 247 | set_all(PyObject *target, PyObject *item)
|
---|
| 248 | {
|
---|
| 249 | int i, n;
|
---|
| 250 |
|
---|
| 251 | n = PyObject_Length(target);
|
---|
| 252 | if (n < 0)
|
---|
| 253 | return -1;
|
---|
| 254 | for (i = 0; i < n; i++) {
|
---|
| 255 | PyObject *index = PyInt_FromLong(i);
|
---|
| 256 | if (!index)
|
---|
| 257 | return -1;
|
---|
[391] | 258 | if (PyObject_SetItem(target, index, item) < 0) {
|
---|
| 259 | Py_DECREF(index);
|
---|
[2] | 260 | return -1;
|
---|
[391] | 261 | }
|
---|
[2] | 262 | Py_DECREF(index);
|
---|
| 263 | }
|
---|
| 264 | return 0;
|
---|
| 265 | }
|
---|
| 266 |
|
---|
| 267 | .. index:: single: set_all()
|
---|
| 268 |
|
---|
| 269 | The situation is slightly different for function return values. While passing
|
---|
| 270 | a reference to most functions does not change your ownership responsibilities
|
---|
| 271 | for that reference, many functions that return a reference to an object give
|
---|
| 272 | you ownership of the reference. The reason is simple: in many cases, the
|
---|
| 273 | returned object is created on the fly, and the reference you get is the only
|
---|
| 274 | reference to the object. Therefore, the generic functions that return object
|
---|
[391] | 275 | references, like :c:func:`PyObject_GetItem` and :c:func:`PySequence_GetItem`,
|
---|
[2] | 276 | always return a new reference (the caller becomes the owner of the reference).
|
---|
| 277 |
|
---|
| 278 | It is important to realize that whether you own a reference returned by a
|
---|
| 279 | function depends on which function you call only --- *the plumage* (the type of
|
---|
| 280 | the object passed as an argument to the function) *doesn't enter into it!*
|
---|
[391] | 281 | Thus, if you extract an item from a list using :c:func:`PyList_GetItem`, you
|
---|
[2] | 282 | don't own the reference --- but if you obtain the same item from the same list
|
---|
[391] | 283 | using :c:func:`PySequence_GetItem` (which happens to take exactly the same
|
---|
[2] | 284 | arguments), you do own a reference to the returned object.
|
---|
| 285 |
|
---|
| 286 | .. index::
|
---|
| 287 | single: PyList_GetItem()
|
---|
| 288 | single: PySequence_GetItem()
|
---|
| 289 |
|
---|
| 290 | Here is an example of how you could write a function that computes the sum of
|
---|
[391] | 291 | the items in a list of integers; once using :c:func:`PyList_GetItem`, and once
|
---|
| 292 | using :c:func:`PySequence_GetItem`. ::
|
---|
[2] | 293 |
|
---|
| 294 | long
|
---|
| 295 | sum_list(PyObject *list)
|
---|
| 296 | {
|
---|
| 297 | int i, n;
|
---|
| 298 | long total = 0;
|
---|
| 299 | PyObject *item;
|
---|
| 300 |
|
---|
| 301 | n = PyList_Size(list);
|
---|
| 302 | if (n < 0)
|
---|
| 303 | return -1; /* Not a list */
|
---|
| 304 | for (i = 0; i < n; i++) {
|
---|
| 305 | item = PyList_GetItem(list, i); /* Can't fail */
|
---|
| 306 | if (!PyInt_Check(item)) continue; /* Skip non-integers */
|
---|
| 307 | total += PyInt_AsLong(item);
|
---|
| 308 | }
|
---|
| 309 | return total;
|
---|
| 310 | }
|
---|
| 311 |
|
---|
| 312 | .. index:: single: sum_list()
|
---|
| 313 |
|
---|
| 314 | ::
|
---|
| 315 |
|
---|
| 316 | long
|
---|
| 317 | sum_sequence(PyObject *sequence)
|
---|
| 318 | {
|
---|
| 319 | int i, n;
|
---|
| 320 | long total = 0;
|
---|
| 321 | PyObject *item;
|
---|
| 322 | n = PySequence_Length(sequence);
|
---|
| 323 | if (n < 0)
|
---|
| 324 | return -1; /* Has no length */
|
---|
| 325 | for (i = 0; i < n; i++) {
|
---|
| 326 | item = PySequence_GetItem(sequence, i);
|
---|
| 327 | if (item == NULL)
|
---|
| 328 | return -1; /* Not a sequence, or other failure */
|
---|
| 329 | if (PyInt_Check(item))
|
---|
| 330 | total += PyInt_AsLong(item);
|
---|
| 331 | Py_DECREF(item); /* Discard reference ownership */
|
---|
| 332 | }
|
---|
| 333 | return total;
|
---|
| 334 | }
|
---|
| 335 |
|
---|
| 336 | .. index:: single: sum_sequence()
|
---|
| 337 |
|
---|
| 338 |
|
---|
| 339 | .. _api-types:
|
---|
| 340 |
|
---|
| 341 | Types
|
---|
| 342 | -----
|
---|
| 343 |
|
---|
| 344 | There are few other data types that play a significant role in the Python/C
|
---|
[391] | 345 | API; most are simple C types such as :c:type:`int`, :c:type:`long`,
|
---|
| 346 | :c:type:`double` and :c:type:`char\*`. A few structure types are used to
|
---|
[2] | 347 | describe static tables used to list the functions exported by a module or the
|
---|
| 348 | data attributes of a new object type, and another is used to describe the value
|
---|
| 349 | of a complex number. These will be discussed together with the functions that
|
---|
| 350 | use them.
|
---|
| 351 |
|
---|
| 352 |
|
---|
| 353 | .. _api-exceptions:
|
---|
| 354 |
|
---|
| 355 | Exceptions
|
---|
| 356 | ==========
|
---|
| 357 |
|
---|
| 358 | The Python programmer only needs to deal with exceptions if specific error
|
---|
| 359 | handling is required; unhandled exceptions are automatically propagated to the
|
---|
| 360 | caller, then to the caller's caller, and so on, until they reach the top-level
|
---|
| 361 | interpreter, where they are reported to the user accompanied by a stack
|
---|
| 362 | traceback.
|
---|
| 363 |
|
---|
| 364 | .. index:: single: PyErr_Occurred()
|
---|
| 365 |
|
---|
[391] | 366 | For C programmers, however, error checking always has to be explicit. All
|
---|
| 367 | functions in the Python/C API can raise exceptions, unless an explicit claim is
|
---|
| 368 | made otherwise in a function's documentation. In general, when a function
|
---|
| 369 | encounters an error, it sets an exception, discards any object references that
|
---|
| 370 | it owns, and returns an error indicator. If not documented otherwise, this
|
---|
| 371 | indicator is either *NULL* or ``-1``, depending on the function's return type.
|
---|
| 372 | A few functions return a Boolean true/false result, with false indicating an
|
---|
| 373 | error. Very few functions return no explicit error indicator or have an
|
---|
| 374 | ambiguous return value, and require explicit testing for errors with
|
---|
| 375 | :c:func:`PyErr_Occurred`. These exceptions are always explicitly documented.
|
---|
[2] | 376 |
|
---|
| 377 | .. index::
|
---|
| 378 | single: PyErr_SetString()
|
---|
| 379 | single: PyErr_Clear()
|
---|
| 380 |
|
---|
| 381 | Exception state is maintained in per-thread storage (this is equivalent to
|
---|
| 382 | using global storage in an unthreaded application). A thread can be in one of
|
---|
| 383 | two states: an exception has occurred, or not. The function
|
---|
[391] | 384 | :c:func:`PyErr_Occurred` can be used to check for this: it returns a borrowed
|
---|
[2] | 385 | reference to the exception type object when an exception has occurred, and
|
---|
| 386 | *NULL* otherwise. There are a number of functions to set the exception state:
|
---|
[391] | 387 | :c:func:`PyErr_SetString` is the most common (though not the most general)
|
---|
| 388 | function to set the exception state, and :c:func:`PyErr_Clear` clears the
|
---|
[2] | 389 | exception state.
|
---|
| 390 |
|
---|
| 391 | .. index::
|
---|
| 392 | single: exc_type (in module sys)
|
---|
| 393 | single: exc_value (in module sys)
|
---|
| 394 | single: exc_traceback (in module sys)
|
---|
| 395 |
|
---|
| 396 | The full exception state consists of three objects (all of which can be
|
---|
| 397 | *NULL*): the exception type, the corresponding exception value, and the
|
---|
| 398 | traceback. These have the same meanings as the Python objects
|
---|
| 399 | ``sys.exc_type``, ``sys.exc_value``, and ``sys.exc_traceback``; however, they
|
---|
| 400 | are not the same: the Python objects represent the last exception being handled
|
---|
| 401 | by a Python :keyword:`try` ... :keyword:`except` statement, while the C level
|
---|
| 402 | exception state only exists while an exception is being passed on between C
|
---|
| 403 | functions until it reaches the Python bytecode interpreter's main loop, which
|
---|
| 404 | takes care of transferring it to ``sys.exc_type`` and friends.
|
---|
| 405 |
|
---|
| 406 | .. index:: single: exc_info() (in module sys)
|
---|
| 407 |
|
---|
| 408 | Note that starting with Python 1.5, the preferred, thread-safe way to access the
|
---|
| 409 | exception state from Python code is to call the function :func:`sys.exc_info`,
|
---|
| 410 | which returns the per-thread exception state for Python code. Also, the
|
---|
| 411 | semantics of both ways to access the exception state have changed so that a
|
---|
| 412 | function which catches an exception will save and restore its thread's exception
|
---|
| 413 | state so as to preserve the exception state of its caller. This prevents common
|
---|
| 414 | bugs in exception handling code caused by an innocent-looking function
|
---|
| 415 | overwriting the exception being handled; it also reduces the often unwanted
|
---|
| 416 | lifetime extension for objects that are referenced by the stack frames in the
|
---|
| 417 | traceback.
|
---|
| 418 |
|
---|
| 419 | As a general principle, a function that calls another function to perform some
|
---|
| 420 | task should check whether the called function raised an exception, and if so,
|
---|
| 421 | pass the exception state on to its caller. It should discard any object
|
---|
| 422 | references that it owns, and return an error indicator, but it should *not* set
|
---|
| 423 | another exception --- that would overwrite the exception that was just raised,
|
---|
| 424 | and lose important information about the exact cause of the error.
|
---|
| 425 |
|
---|
| 426 | .. index:: single: sum_sequence()
|
---|
| 427 |
|
---|
| 428 | A simple example of detecting exceptions and passing them on is shown in the
|
---|
[391] | 429 | :c:func:`sum_sequence` example above. It so happens that this example doesn't
|
---|
[2] | 430 | need to clean up any owned references when it detects an error. The following
|
---|
| 431 | example function shows some error cleanup. First, to remind you why you like
|
---|
| 432 | Python, we show the equivalent Python code::
|
---|
| 433 |
|
---|
| 434 | def incr_item(dict, key):
|
---|
| 435 | try:
|
---|
| 436 | item = dict[key]
|
---|
| 437 | except KeyError:
|
---|
| 438 | item = 0
|
---|
| 439 | dict[key] = item + 1
|
---|
| 440 |
|
---|
| 441 | .. index:: single: incr_item()
|
---|
| 442 |
|
---|
| 443 | Here is the corresponding C code, in all its glory::
|
---|
| 444 |
|
---|
| 445 | int
|
---|
| 446 | incr_item(PyObject *dict, PyObject *key)
|
---|
| 447 | {
|
---|
| 448 | /* Objects all initialized to NULL for Py_XDECREF */
|
---|
| 449 | PyObject *item = NULL, *const_one = NULL, *incremented_item = NULL;
|
---|
| 450 | int rv = -1; /* Return value initialized to -1 (failure) */
|
---|
| 451 |
|
---|
| 452 | item = PyObject_GetItem(dict, key);
|
---|
| 453 | if (item == NULL) {
|
---|
| 454 | /* Handle KeyError only: */
|
---|
| 455 | if (!PyErr_ExceptionMatches(PyExc_KeyError))
|
---|
| 456 | goto error;
|
---|
| 457 |
|
---|
| 458 | /* Clear the error and use zero: */
|
---|
| 459 | PyErr_Clear();
|
---|
| 460 | item = PyInt_FromLong(0L);
|
---|
| 461 | if (item == NULL)
|
---|
| 462 | goto error;
|
---|
| 463 | }
|
---|
| 464 | const_one = PyInt_FromLong(1L);
|
---|
| 465 | if (const_one == NULL)
|
---|
| 466 | goto error;
|
---|
| 467 |
|
---|
| 468 | incremented_item = PyNumber_Add(item, const_one);
|
---|
| 469 | if (incremented_item == NULL)
|
---|
| 470 | goto error;
|
---|
| 471 |
|
---|
| 472 | if (PyObject_SetItem(dict, key, incremented_item) < 0)
|
---|
| 473 | goto error;
|
---|
| 474 | rv = 0; /* Success */
|
---|
| 475 | /* Continue with cleanup code */
|
---|
| 476 |
|
---|
| 477 | error:
|
---|
| 478 | /* Cleanup code, shared by success and failure path */
|
---|
| 479 |
|
---|
| 480 | /* Use Py_XDECREF() to ignore NULL references */
|
---|
| 481 | Py_XDECREF(item);
|
---|
| 482 | Py_XDECREF(const_one);
|
---|
| 483 | Py_XDECREF(incremented_item);
|
---|
| 484 |
|
---|
| 485 | return rv; /* -1 for error, 0 for success */
|
---|
| 486 | }
|
---|
| 487 |
|
---|
| 488 | .. index:: single: incr_item()
|
---|
| 489 |
|
---|
| 490 | .. index::
|
---|
| 491 | single: PyErr_ExceptionMatches()
|
---|
| 492 | single: PyErr_Clear()
|
---|
| 493 | single: Py_XDECREF()
|
---|
| 494 |
|
---|
| 495 | This example represents an endorsed use of the ``goto`` statement in C!
|
---|
[391] | 496 | It illustrates the use of :c:func:`PyErr_ExceptionMatches` and
|
---|
| 497 | :c:func:`PyErr_Clear` to handle specific exceptions, and the use of
|
---|
| 498 | :c:func:`Py_XDECREF` to dispose of owned references that may be *NULL* (note the
|
---|
| 499 | ``'X'`` in the name; :c:func:`Py_DECREF` would crash when confronted with a
|
---|
[2] | 500 | *NULL* reference). It is important that the variables used to hold owned
|
---|
| 501 | references are initialized to *NULL* for this to work; likewise, the proposed
|
---|
| 502 | return value is initialized to ``-1`` (failure) and only set to success after
|
---|
| 503 | the final call made is successful.
|
---|
| 504 |
|
---|
| 505 |
|
---|
| 506 | .. _api-embedding:
|
---|
| 507 |
|
---|
| 508 | Embedding Python
|
---|
| 509 | ================
|
---|
| 510 |
|
---|
| 511 | The one important task that only embedders (as opposed to extension writers) of
|
---|
| 512 | the Python interpreter have to worry about is the initialization, and possibly
|
---|
| 513 | the finalization, of the Python interpreter. Most functionality of the
|
---|
| 514 | interpreter can only be used after the interpreter has been initialized.
|
---|
| 515 |
|
---|
| 516 | .. index::
|
---|
| 517 | single: Py_Initialize()
|
---|
| 518 | module: __builtin__
|
---|
| 519 | module: __main__
|
---|
| 520 | module: sys
|
---|
| 521 | module: exceptions
|
---|
| 522 | triple: module; search; path
|
---|
| 523 | single: path (in module sys)
|
---|
| 524 |
|
---|
[391] | 525 | The basic initialization function is :c:func:`Py_Initialize`. This initializes
|
---|
[2] | 526 | the table of loaded modules, and creates the fundamental modules
|
---|
| 527 | :mod:`__builtin__`, :mod:`__main__`, :mod:`sys`, and :mod:`exceptions`. It also
|
---|
| 528 | initializes the module search path (``sys.path``).
|
---|
| 529 |
|
---|
[391] | 530 | .. index:: single: PySys_SetArgvEx()
|
---|
[2] | 531 |
|
---|
[391] | 532 | :c:func:`Py_Initialize` does not set the "script argument list" (``sys.argv``).
|
---|
| 533 | If this variable is needed by Python code that will be executed later, it must
|
---|
| 534 | be set explicitly with a call to ``PySys_SetArgvEx(argc, argv, updatepath)``
|
---|
| 535 | after the call to :c:func:`Py_Initialize`.
|
---|
[2] | 536 |
|
---|
| 537 | On most systems (in particular, on Unix and Windows, although the details are
|
---|
[391] | 538 | slightly different), :c:func:`Py_Initialize` calculates the module search path
|
---|
[2] | 539 | based upon its best guess for the location of the standard Python interpreter
|
---|
| 540 | executable, assuming that the Python library is found in a fixed location
|
---|
| 541 | relative to the Python interpreter executable. In particular, it looks for a
|
---|
| 542 | directory named :file:`lib/python{X.Y}` relative to the parent directory
|
---|
| 543 | where the executable named :file:`python` is found on the shell command search
|
---|
| 544 | path (the environment variable :envvar:`PATH`).
|
---|
| 545 |
|
---|
| 546 | For instance, if the Python executable is found in
|
---|
| 547 | :file:`/usr/local/bin/python`, it will assume that the libraries are in
|
---|
| 548 | :file:`/usr/local/lib/python{X.Y}`. (In fact, this particular path is also
|
---|
| 549 | the "fallback" location, used when no executable file named :file:`python` is
|
---|
| 550 | found along :envvar:`PATH`.) The user can override this behavior by setting the
|
---|
| 551 | environment variable :envvar:`PYTHONHOME`, or insert additional directories in
|
---|
| 552 | front of the standard path by setting :envvar:`PYTHONPATH`.
|
---|
| 553 |
|
---|
| 554 | .. index::
|
---|
| 555 | single: Py_SetProgramName()
|
---|
| 556 | single: Py_GetPath()
|
---|
| 557 | single: Py_GetPrefix()
|
---|
| 558 | single: Py_GetExecPrefix()
|
---|
| 559 | single: Py_GetProgramFullPath()
|
---|
| 560 |
|
---|
| 561 | The embedding application can steer the search by calling
|
---|
[391] | 562 | ``Py_SetProgramName(file)`` *before* calling :c:func:`Py_Initialize`. Note that
|
---|
[2] | 563 | :envvar:`PYTHONHOME` still overrides this and :envvar:`PYTHONPATH` is still
|
---|
| 564 | inserted in front of the standard path. An application that requires total
|
---|
[391] | 565 | control has to provide its own implementation of :c:func:`Py_GetPath`,
|
---|
| 566 | :c:func:`Py_GetPrefix`, :c:func:`Py_GetExecPrefix`, and
|
---|
| 567 | :c:func:`Py_GetProgramFullPath` (all defined in :file:`Modules/getpath.c`).
|
---|
[2] | 568 |
|
---|
| 569 | .. index:: single: Py_IsInitialized()
|
---|
| 570 |
|
---|
| 571 | Sometimes, it is desirable to "uninitialize" Python. For instance, the
|
---|
| 572 | application may want to start over (make another call to
|
---|
[391] | 573 | :c:func:`Py_Initialize`) or the application is simply done with its use of
|
---|
[2] | 574 | Python and wants to free memory allocated by Python. This can be accomplished
|
---|
[391] | 575 | by calling :c:func:`Py_Finalize`. The function :c:func:`Py_IsInitialized` returns
|
---|
[2] | 576 | true if Python is currently in the initialized state. More information about
|
---|
[391] | 577 | these functions is given in a later chapter. Notice that :c:func:`Py_Finalize`
|
---|
[2] | 578 | does *not* free all memory allocated by the Python interpreter, e.g. memory
|
---|
| 579 | allocated by extension modules currently cannot be released.
|
---|
| 580 |
|
---|
| 581 |
|
---|
| 582 | .. _api-debugging:
|
---|
| 583 |
|
---|
| 584 | Debugging Builds
|
---|
| 585 | ================
|
---|
| 586 |
|
---|
| 587 | Python can be built with several macros to enable extra checks of the
|
---|
| 588 | interpreter and extension modules. These checks tend to add a large amount of
|
---|
| 589 | overhead to the runtime so they are not enabled by default.
|
---|
| 590 |
|
---|
| 591 | A full list of the various types of debugging builds is in the file
|
---|
| 592 | :file:`Misc/SpecialBuilds.txt` in the Python source distribution. Builds are
|
---|
| 593 | available that support tracing of reference counts, debugging the memory
|
---|
| 594 | allocator, or low-level profiling of the main interpreter loop. Only the most
|
---|
| 595 | frequently-used builds will be described in the remainder of this section.
|
---|
| 596 |
|
---|
[391] | 597 | Compiling the interpreter with the :c:macro:`Py_DEBUG` macro defined produces
|
---|
| 598 | what is generally meant by "a debug build" of Python. :c:macro:`Py_DEBUG` is
|
---|
| 599 | enabled in the Unix build by adding ``--with-pydebug`` to the
|
---|
| 600 | :file:`./configure` command. It is also implied by the presence of the
|
---|
| 601 | not-Python-specific :c:macro:`_DEBUG` macro. When :c:macro:`Py_DEBUG` is enabled
|
---|
[2] | 602 | in the Unix build, compiler optimization is disabled.
|
---|
| 603 |
|
---|
| 604 | In addition to the reference count debugging described below, the following
|
---|
| 605 | extra checks are performed:
|
---|
| 606 |
|
---|
| 607 | * Extra checks are added to the object allocator.
|
---|
| 608 |
|
---|
| 609 | * Extra checks are added to the parser and compiler.
|
---|
| 610 |
|
---|
| 611 | * Downcasts from wide types to narrow types are checked for loss of information.
|
---|
| 612 |
|
---|
| 613 | * A number of assertions are added to the dictionary and set implementations.
|
---|
| 614 | In addition, the set object acquires a :meth:`test_c_api` method.
|
---|
| 615 |
|
---|
| 616 | * Sanity checks of the input arguments are added to frame creation.
|
---|
| 617 |
|
---|
| 618 | * The storage for long ints is initialized with a known invalid pattern to catch
|
---|
| 619 | reference to uninitialized digits.
|
---|
| 620 |
|
---|
| 621 | * Low-level tracing and extra exception checking are added to the runtime
|
---|
| 622 | virtual machine.
|
---|
| 623 |
|
---|
| 624 | * Extra checks are added to the memory arena implementation.
|
---|
| 625 |
|
---|
| 626 | * Extra debugging is added to the thread module.
|
---|
| 627 |
|
---|
| 628 | There may be additional checks not mentioned here.
|
---|
| 629 |
|
---|
[391] | 630 | Defining :c:macro:`Py_TRACE_REFS` enables reference tracing. When defined, a
|
---|
[2] | 631 | circular doubly linked list of active objects is maintained by adding two extra
|
---|
[391] | 632 | fields to every :c:type:`PyObject`. Total allocations are tracked as well. Upon
|
---|
[2] | 633 | exit, all existing references are printed. (In interactive mode this happens
|
---|
[391] | 634 | after every statement run by the interpreter.) Implied by :c:macro:`Py_DEBUG`.
|
---|
[2] | 635 |
|
---|
| 636 | Please refer to :file:`Misc/SpecialBuilds.txt` in the Python source distribution
|
---|
| 637 | for more detailed information.
|
---|
| 638 |
|
---|