This is Info file /home/pdm/tmp/Python-1.5.2p1/Doc/api/python-api.info,
produced by Makeinfo version 1.68 from the input file api.texi.

   July 6, 1999			1.5.2


File: python-api.info,  Node: Top,  Next: Front Matter,  Prev: (dir),  Up: (dir)

Python/C API Reference Manual
*****************************

* Menu:

* Front Matter::
* Introduction::
* Very High Level Layer::
* Reference Counting::
* Exception Handling::
* Utilities::
* Abstract Objects Layer::
* Concrete Objects Layer::
* Initialization::
* Defining New Object Types::
* Debugging::
* Module Index::
* Class-Exception-Object Index::
* Function-Method-Variable Index::
* Miscellaneous Index::


File: python-api.info,  Node: Front Matter,  Next: Introduction,  Prev: Top,  Up: Top

Front Matter
************

   Copyright (C) 1991-1995 by Stichting Mathematisch Centrum,
Amsterdam, The Netherlands.

   All Rights Reserved

   Permission to use, copy, modify, and distribute this software and its
documentation for any purpose and without fee is hereby granted,
provided that the above copyright notice appear in all copies and that
both that copyright notice and this permission notice appear in
supporting documentation, and that the names of Stichting Mathematisch
Centrum or CWI or Corporation for National Research Initiatives or CNRI
not be used in advertising or publicity pertaining to distribution of
the software without specific, written prior permission.

   While CWI is the initial source for this software, a modified version
is made available by the Corporation for National Research Initiatives
(CNRI) at the Internet address `ftp://ftp.python.org'.

   STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
THIS SOFTWARE.

     This manual documents the API used by C (or C++) programmers who
     want to write extension modules or embed Python.  It is a
     companion to *Extending and Embedding the Python Interpreter*,
     which describes the general principles of extension writing but
     does not document the API functions in detail.

     *Warning:* The current version of this document is incomplete.  I
     hope that it is nevertheless useful.  I will continue to work on
     it, and release new versions from time to time, independent from
     Python source code releases.



File: python-api.info,  Node: Introduction,  Next: Very High Level Layer,  Prev: Front Matter,  Up: Top

Introduction
************

   The Application Programmer's Interface to Python gives C and C++
programmers access to the Python interpreter at a variety of levels.
The API is equally usable from C++, but for brevity it is generally
referred to as the Python/C API.  There are two fundamentally different
reasons for using the Python/C API.  The first reason is to write
*extension modules* for specific purposes; these are C modules that
extend the Python interpreter.  This is probably the most common use.
The second reason is to use Python as a component in a larger
application; this technique is generally referred to as "embedding"
Python in an application.

   Writing an extension module is a relatively well-understood process,
where a "cookbook" approach works well.  There are several tools that
automate the process to some extent.  While people have embedded Python
in other applications since its early existence, the process of
embedding Python is less straightforward that writing an extension.
Python 1.5 introduces a number of new API functions as well as some
changes to the build process that make embedding much simpler.  This
manual describes the 1.5.2p1 state of affairs.

   Many API functions are useful independent of whether you're embedding
or extending Python; moreover, most applications that embed Python will
need to provide a custom extension as well, so it's probably a good
idea to become familiar with writing an extension before attempting to
embed Python in a real application.

* Menu:

* Include Files::
* Objects::
* Exceptions::
* Embedding Python::


File: python-api.info,  Node: Include Files,  Next: Objects,  Prev: Introduction,  Up: Introduction

Include Files
=============

   All function, type and macro definitions needed to use the Python/C
API are included in your code by the following line:

     #include "Python.h"

   This implies inclusion of the following standard headers:
`<stdio.h>', `<string.h>', `<errno.h>', and `<stdlib.h>' (if available).

   All user visible names defined by Python.h (except those defined by
the included standard headers) have one of the prefixes `Py' or `_Py'.
Names beginning with `_Py' are for internal use only.  Structure member
names do not have a reserved prefix.

   *Important:* user code should never define names that begin with
`Py' or `_Py'.  This confuses the reader, and jeopardizes the
portability of the user code to future Python versions, which may
define additional names beginning with one of these prefixes.


File: python-api.info,  Node: Objects,  Next: Exceptions,  Prev: Include Files,  Up: Introduction

Objects, Types and Reference Counts
===================================

   Most Python/C API functions have one or more arguments as well as a
return value of type `PyObject *'.  This type is a pointer to an opaque
data type representing an arbitrary Python object.  Since all Python
object types are treated the same way by the Python language in most
situations (e.g., assignments, scope rules, and argument passing), it
is only fitting that they should be represented by a single C type.
All Python objects live on the heap: you never declare an automatic or
static variable of type `PyObject', only pointer variables of type
`PyObject *' can be declared.

   All Python objects (even Python integers) have a "type" and a
"reference count".  An object's type determines what kind of object it
is (e.g., an integer, a list, or a user-defined function; there are
many more as explained in the *Python Reference Manual*).  For each of
the well-known types there is a macro to check whether an object is of
that type; for instance, `PyList_Check(A)' is true iff the object
pointed to by A is a Python list.

* Menu:

* Reference Counts::
* Types::


File: python-api.info,  Node: Reference Counts,  Next: Types,  Prev: Objects,  Up: Objects

Reference Counts
----------------

   The reference count is important because today's computers have a
finite (and often severely limited) memory size; it counts how many
different places there are that have a reference to an object.  Such a
place could be another object, or a global (or static) C variable, or a
local variable in some C function.  When an object's reference count
becomes zero, the object is deallocated.  If it contains references to
other objects, their reference count is decremented.  Those other
objects may be deallocated in turn, if this decrement makes their
reference count become zero, and so on.  (There's an obvious problem
with objects that reference each other here; for now, the solution is
"don't do that".)

   Reference counts are always manipulated explicitly.  The normal way
is to use the macro `Py_INCREF()' to increment an object's reference
count by one, and `Py_DECREF()' to decrement it by one.  The decref
macro is considerably more complex than the incref one, since it must
check whether the reference count becomes zero and then cause the
object's deallocator, which is a function pointer contained in the
object's type structure.  The type-specific deallocator takes care of
decrementing the reference counts for other objects contained in the
object, and so on, if this is a compound object type such as a list.
There's no chance that the reference count can overflow; at least as
many bits are used to hold the reference count as there are distinct
memory locations in virtual memory (assuming `sizeof(long) >=
sizeof(char *)').  Thus, the reference count increment is a simple
operation.

   It is not necessary to increment an object's reference count for
every local variable that contains a pointer to an object.  In theory,
the object's reference count goes up by one when the variable is made to
point to it and it goes down by one when the variable goes out of
scope.  However, these two cancel each other out, so at the end the
reference count hasn't changed.  The only real reason to use the
reference count is to prevent the object from being deallocated as long
as our variable is pointing to it.  If we know that there is at least
one other reference to the object that lives at least as long as our
variable, there is no need to increment the reference count
temporarily.  An important situation where this arises is in objects
that are passed as arguments to C functions in an extension module that
are called from Python; the call mechanism guarantees to hold a
reference to every argument for the duration of the call.

   However, a common pitfall is to extract an object from a list and
hold on to it for a while without incrementing its reference count.
Some other operation might conceivably remove the object from the list,
decrementing its reference count and possible deallocating it.  The
real danger is that innocent-looking operations may invoke arbitrary
Python code which could do this; there is a code path which allows
control to flow back to the user from a `Py_DECREF()', so almost any
operation is potentially dangerous.

   A safe approach is to always use the generic operations (functions
whose name begins with `PyObject_', `PyNumber_', `PySequence_' or
`PyMapping_').  These operations always increment the reference count
of the object they return.  This leaves the caller with the
responsibility to call `Py_DECREF()' when they are done with the
result; this soon becomes second nature.

* Menu:

* Reference Count Details::


File: python-api.info,  Node: Reference Count Details,  Prev: Reference Counts,  Up: Reference Counts

Reference Count Details
.......................

   The reference count behavior of functions in the Python/C API is best
expelained in terms of *ownership of references*.  Note that we talk of
owning references, never of owning objects; objects are always shared!
When a function owns a reference, it has to dispose of it properly --
either by passing ownership on (usually to its caller) or by calling
`Py_DECREF()' or `Py_XDECREF()'.  When a function passes ownership of a
reference on to its caller, the caller is said to receive a *new*
reference.  When no ownership is transferred, the caller is said to
*borrow* the reference.  Nothing needs to be done for a borrowed
reference.

   Conversely, when calling a function passes it a reference to an
object, there are two possibilities: the function *steals* a reference
to the object, or it does not.  Few functions steal references; the two
notable exceptions are `PyList_SetItem()' and `PyTuple_SetItem()', which
steal a reference to the item (but not to the tuple or list into which
the item is put!).  These functions were designed to steal a reference
because of a common idiom for populating a tuple or list with newly
created objects; for example, the code to create the tuple `(1, 2,
"three")' could look like this (forgetting about error handling for the
moment; a better way to code this is shown below anyway):

     PyObject *t;
     
     t = PyTuple_New(3);
     PyTuple_SetItem(t, 0, PyInt_FromLong(1L));
     PyTuple_SetItem(t, 1, PyInt_FromLong(2L));
     PyTuple_SetItem(t, 2, PyString_FromString("three"));

   Incidentally, `PyTuple_SetItem()' is the *only* way to set tuple
items; `PySequence_SetItem()' and `PyObject_SetItem()' refuse to do
this since tuples are an immutable data type.  You should only use
`PyTuple_SetItem()' for tuples that you are creating yourself.

   Equivalent code for populating a list can be written using
`PyList_New()' and `PyList_SetItem()'.  Such code can also use
`PySequence_SetItem()'; this illustrates the difference between the two
(the extra `Py_DECREF()' calls):

     PyObject *l, *x;
     
     l = PyList_New(3);
     x = PyInt_FromLong(1L);
     PySequence_SetItem(l, 0, x); Py_DECREF(x);
     x = PyInt_FromLong(2L);
     PySequence_SetItem(l, 1, x); Py_DECREF(x);
     x = PyString_FromString("three");
     PySequence_SetItem(l, 2, x); Py_DECREF(x);

   You might find it strange that the "recommended" approach takes more
code.  However, in practice, you will rarely use these ways of creating
and populating a tuple or list.  There's a generic function,
`Py_BuildValue()', that can create most common objects from C values,
directed by a "format string".  For example, the above two blocks of
code could be replaced by the following (which also takes care of the
error checking):

     PyObject *t, *l;
     
     t = Py_BuildValue("(iis)", 1, 2, "three");
     l = Py_BuildValue("[iis]", 1, 2, "three");

   It is much more common to use `PyObject_SetItem()' and friends with
items whose references you are only borrowing, like arguments that were
passed in to the function you are writing.  In that case, their
behaviour regarding reference counts is much saner, since you don't
have to increment a reference count so you can give a reference away
("have it be stolen").  For example, this function sets all items of a
list (actually, any mutable sequence) to a given item:

     int set_all(PyObject *target, PyObject *item)
     {
         int i, n;
     
         n = PyObject_Length(target);
         if (n < 0)
             return -1;
         for (i = 0; i < n; i++) {
             if (PyObject_SetItem(target, i, item) < 0)
                 return -1;
         }
         return 0;
     }

   The situation is slightly different for function return values.
While passing a reference to most functions does not change your
ownership responsibilities for that reference, many functions that
return a referece to an object give you ownership of the reference.
The reason is simple: in many cases, the returned object is created on
the fly, and the reference you get is the only reference to the object.
Therefore, the generic functions that return object references, like
`PyObject_GetItem()' and `PySequence_GetItem()', always return a new
reference (i.e., the  caller becomes the owner of the reference).

   It is important to realize that whether you own a reference returned
by a function depends on which function you call only -- *the plumage*
(i.e., the type of the type of the object passed as an argument to the
function) *doesn't enter into it!*  Thus, if you extract an item from a
list using `PyList_GetItem()', you don't own the reference -- but if
you obtain the same item from the same list using
`PySequence_GetItem()' (which happens to take exactly the same
arguments), you do own a reference to the returned object.

   Here is an example of how you could write a function that computes
the sum of the items in a list of integers; once using
`PyList_GetItem()', once using `PySequence_GetItem()'.

     long sum_list(PyObject *list)
     {
         int i, n;
         long total = 0;
         PyObject *item;
     
         n = PyList_Size(list);
         if (n < 0)
             return -1; /* Not a list */
         for (i = 0; i < n; i++) {
             item = PyList_GetItem(list, i); /* Can't fail */
             if (!PyInt_Check(item)) continue; /* Skip non-integers */
             total += PyInt_AsLong(item);
         }
         return total;
     }

     long sum_sequence(PyObject *sequence)
     {
         int i, n;
         long total = 0;
         PyObject *item;
         n = PyObject_Size(list);
         if (n < 0)
             return -1; /* Has no length */
         for (i = 0; i < n; i++) {
             item = PySequence_GetItem(list, i);
             if (item == NULL)
                 return -1; /* Not a sequence, or other failure */
             if (PyInt_Check(item))
                 total += PyInt_AsLong(item);
             Py_DECREF(item); /* Discard reference ownership */
         }
         return total;
     }


File: python-api.info,  Node: Types,  Prev: Reference Counts,  Up: Objects

Types
-----

   There are few other data types that play a significant role in the
Python/C API; most are simple C types such as `int', `long', `double'
and `char *'.  A few structure types are used to describe static tables
used to list the functions exported by a module or the data attributes
of a new object type.  These will be discussed together with the
functions that use them.


File: python-api.info,  Node: Exceptions,  Next: Embedding Python,  Prev: Objects,  Up: Introduction

Exceptions
==========

   The Python programmer only needs to deal with exceptions if specific
error handling is required; unhandled exceptions are automatically
propagated to the caller, then to the caller's caller, and so on, till
they reach the top-level interpreter, where they are reported to the
user accompanied by a stack traceback.

   For C programmers, however, error checking always has to be explicit.
All functions in the Python/C API can raise exceptions, unless an
explicit claim is made otherwise in a function's documentation.  In
general, when a function encounters an error, it sets an exception,
discards any object references that it owns, and returns an error
indicator -- usually `NULL' or `-1'.  A few functions return a Boolean
true/false result, with false indicating an error.  Very few functions
return no explicit error indicator or have an ambiguous return value,
and require explicit testing for errors with `PyErr_Occurred()'.

   Exception state is maintained in per-thread storage (this is
equivalent to using global storage in an unthreaded application).  A
thread can be in one of two states: an exception has occurred, or not.
The function `PyErr_Occurred()' can be used to check for this: it
returns a borrowed reference to the exception type object when an
exception has occurred, and `NULL' otherwise.  There are a number of
functions to set the exception state: `PyErr_SetString()' is the most
common (though not the most general) function to set the exception
state, and `PyErr_Clear()' clears the exception state.

   The full exception state consists of three objects (all of which can
be `NULL'): the exception type, the corresponding exception value, and
the traceback.  These have the same meanings as the Python object
`sys.exc_type', `sys.exc_value', `sys.exc_traceback'; however, they are
not the same: the Python objects represent the last exception being
handled by a Python `try' ... `except' statement, while the C level
exception state only exists while an exception is being passed on
between C functions until it reaches the Python interpreter, which
takes care of transferring it to `sys.exc_type' and friends.

   Note that starting with Python 1.5, the preferred, thread-safe way to
access the exception state from Python code is to call the function
`sys.exc_info()', which returns the per-thread exception state for
Python code.  Also, the semantics of both ways to access the exception
state have changed so that a function which catches an exception will
save and restore its thread's exception state so as to preserve the
exception state of its caller.  This prevents common bugs in exception
handling code caused by an innocent-looking function overwriting the
exception being handled; it also reduces the often unwanted lifetime
extension for objects that are referenced by the stack frames in the
traceback.

   As a general principle, a function that calls another function to
perform some task should check whether the called function raised an
exception, and if so, pass the exception state on to its caller.  It
should discard any object references that it owns, and returns an error
indicator, but it should *not* set another exception -- that would
overwrite the exception that was just raised, and lose important
information about the exact cause of the error.

   A simple example of detecting exceptions and passing them on is shown
in the `sum_sequence()' example above.  It so happens that that example
doesn't need to clean up any owned references when it detects an error.
The following example function shows some error cleanup.  First, to
remind you why you like Python, we show the equivalent Python code:

     def incr_item(dict, key):
         try:
             item = dict[key]
         except KeyError:
             item = 0
         return item + 1

   Here is the corresponding C code, in all its glory:

     int incr_item(PyObject *dict, PyObject *key)
     {
         /* Objects all initialized to NULL for Py_XDECREF */
         PyObject *item = NULL, *const_one = NULL, *incremented_item = NULL;
         int rv = -1; /* Return value initialized to -1 (failure) */
     
         item = PyObject_GetItem(dict, key);
         if (item == NULL) {
             /* Handle KeyError only: */
             if (!PyErr_ExceptionMatches(PyExc_KeyError)) goto error;
     
             /* Clear the error and use zero: */
             PyErr_Clear();
             item = PyInt_FromLong(0L);
             if (item == NULL) goto error;
         }
     
         const_one = PyInt_FromLong(1L);
         if (const_one == NULL) goto error;
     
         incremented_item = PyNumber_Add(item, const_one);
         if (incremented_item == NULL) goto error;
     
         if (PyObject_SetItem(dict, key, incremented_item) < 0) goto error;
         rv = 0; /* Success */
         /* Continue with cleanup code */
     
      error:
         /* Cleanup code, shared by success and failure path */
     
         /* Use Py_XDECREF() to ignore NULL references */
         Py_XDECREF(item);
         Py_XDECREF(const_one);
         Py_XDECREF(incremented_item);
     
         return rv; /* -1 for error, 0 for success */
     }

   This example represents an endorsed use of the `goto' statement in
C!  It illustrates the use of `PyErr_ExceptionMatches()' and
`PyErr_Clear()' to handle specific exceptions, and the use of
`Py_XDECREF()' to dispose of owned references that may be `NULL' (note
the `X' in the name; `Py_DECREF()' would crash when confronted with a
`NULL' reference).  It is important that the variables used to hold
owned references are initialized to `NULL' for this to work; likewise,
the proposed return value is initialized to `-1' (failure) and only set
to success after the final call made is successful.


File: python-api.info,  Node: Embedding Python,  Prev: Exceptions,  Up: Introduction

Embedding Python
================

   The one important task that only embedders (as opposed to extension
writers) of the Python interpreter have to worry about is the
initialization, and possibly the finalization, of the Python
interpreter.  Most functionality of the interpreter can only be used
after the interpreter has been initialized.

   The basic initialization function is `Py_Initialize()'.  This
initializes the table of loaded modules, and creates the fundamental
modules `__builtin__', `__main__' and `sys'.  It also initializes the
module search path (`sys.path').

   `Py_Initialize()' does not set the "script argument list"
(`sys.argv').  If this variable is needed by Python code that will be
executed later, it must be set explicitly with a call to
`PySys_SetArgv(ARGC, ARGV)' subsequent to the call to `Py_Initialize()'.

   On most systems (in particular, on UNIX and Windows, although the
details are slightly different), `Py_Initialize()' calculates the
module search path based upon its best guess for the location of the
standard Python interpreter executable, assuming that the Python
library is found in a fixed location relative to the Python interpreter
executable.  In particular, it looks for a directory named
`lib/python1.5' (replacing `1.5' with the current interpreter version)
relative to the parent directory where the executable named `python' is
found on the shell command search path (the environment variable
`PATH').

   For instance, if the Python executable is found in
`/usr/local/bin/python', it will assume that the libraries are in
`/usr/local/lib/python1.5'.  (In fact, this particular path is also the
"fallback" location, used when no executable file named `python' is
found along `PATH'.)  The user can override this behavior by setting
the environment variable `PYTHONHOME', or insert additional directories
in front of the standard path by setting `PYTHONPATH'.

   The embedding application can steer the search by calling
`Py_SetProgramName(FILE)' *before* calling `Py_Initialize()'.  Note
that `PYTHONHOME' still overrides this and `PYTHONPATH' is still
inserted in front of the standard path.  An application that requires
total control has to provide its own implementation of `Py_GetPath()',
`Py_GetPrefix()', `Py_GetExecPrefix()', `Py_GetProgramFullPath()' (all
defined in `Modules/getpath.c').

   Sometimes, it is desirable to "uninitialize" Python.  For instance,
the application may want to start over (make another call to
`Py_Initialize()') or the application is simply done with its use of
Python and wants to free all memory allocated by Python.  This can be
accomplished by calling `Py_Finalize()'.  The function
`Py_IsInitialized()' returns true iff Python is currently in the
initialized state.  More information about these functions is given in
a later chapter.


File: python-api.info,  Node: Very High Level Layer,  Next: Reference Counting,  Prev: Introduction,  Up: Top

The Very High Level Layer
*************************

   The functions in this chapter will let you execute Python source code
given in a file or a buffer, but they will not let you interact in a
more detailed way with the interpreter.

`int PyRun_AnyFile(FILE *fp, char *filename)'
     If FP refers to a file associated with an interactive device
     (console or terminal input or UNIX pseudo-terminal), return the
     value of `PyRun_InteractiveLoop()', otherwise return the result of
     `PyRun_SimpleFile()'.  If FILENAME is `NULL', use `"???"' as the
     filename.

`int PyRun_SimpleString(char *command)'
     Executes the Python source code from COMMAND in the `__main__'
     module.  If `__main__' does not already exist, it is created.
     Returns `0' on success or `-1' if an exception was raised.  If
     there was an error, there is no way to get the exception
     information.

`int PyRun_SimpleFile(FILE *fp, char *filename)'
     Similar to `PyRun_SimpleString()', but the Python source code is
     read from FP instead of an in-memory string.  FILENAME should be
     the name of the file.

`int PyRun_InteractiveOne(FILE *fp, char *filename)'

`int PyRun_InteractiveLoop(FILE *fp, char *filename)'

`struct _node* PyParser_SimpleParseString(char *str, int start)'
     Parse Python source code from STR using the start token START.
     The result can be used to create a code object which can be
     evaluated efficiently.  This is useful if a code fragment must be
     evaluated many times.

`struct _node* PyParser_SimpleParseFile(FILE *fp, char *filename, int start)'
     Similar to `PyParser_SimpleParseString()', but the Python source
     code is read from FP instead of an in-memory string.  FILENAME
     should be the name of the file.

`PyObject* PyRun_String(char *str, int start, PyObject *globals, PyObject *locals)'
     Execute Python source code from STR in the context specified by
     the dictionaries GLOBALS and LOCALS.  The parameter START
     specifies the start token that should be used to parse the source
     code.

     Returns the result of executing the code as a Python object, or
     `NULL' if an exception was raised.

`PyObject* PyRun_File(FILE *fp, char *filename, int start, PyObject *globals, PyObject *locals)'
     Similar to `PyRun_String()', but the Python source code is read
     from FP instead of an in-memory string.  FILENAME should be the
     name of the file.

`PyObject* Py_CompileString(char *str, char *filename, int start)'
     Parse and compile the Python source code in STR, returning the
     resulting code object.  The start token is given by START; this
     can be used to constrain the code which can be compiled.  The
     filename specified by FILENAME is used to construct the code
     object and may appear in tracebacks or `SyntaxError' exception
     messages.  This returns `NULL' if the code cannot be parsed or
     compiled.


File: python-api.info,  Node: Reference Counting,  Next: Exception Handling,  Prev: Very High Level Layer,  Up: Top

Reference Counting
******************

   The macros in this section are used for managing reference counts of
Python objects.

`void Py_INCREF(PyObject *o)'
     Increment the reference count for object O.  The object must not
     be `NULL'; if you aren't sure that it isn't `NULL', use
     `Py_XINCREF()'.

`void Py_XINCREF(PyObject *o)'
     Increment the reference count for object O.  The object may be
     `NULL', in which case the macro has no effect.

`void Py_DECREF(PyObject *o)'
     Decrement the reference count for object O.  The object must not
     be `NULL'; if you aren't sure that it isn't `NULL', use
     `Py_XDECREF()'.  If the reference count reaches zero, the object's
     type's deallocation function (which must not be `NULL') is invoked.

     *Warning:* The deallocation function can cause arbitrary Python
     code to be invoked (e.g. when a class instance with a `__del__()'
     method is deallocated).  While exceptions in such code are not
     propagated, the executed code has free access to all Python global
     variables.  This means that any object that is reachable from a
     global variable should be in a consistent state before
     `Py_DECREF()' is invoked.  For example, code to delete an object
     from a list should copy a reference to the deleted object in a
     temporary variable, update the list data structure, and then call
     `Py_DECREF()' for the temporary variable.

`void Py_XDECREF(PyObject *o)'
     Decrement the reference count for object O.  The object may be
     `NULL', in which case the macro has no effect; otherwise the effect
     is the same as for `Py_DECREF()', and the same warning applies.

   The following functions or macros are only for internal use:
`_Py_Dealloc()', `_Py_ForgetReference()', `_Py_NewReference()', as well
as the global variable `_Py_RefTotal'.

   XXX Should mention Py_Malloc(), Py_Realloc(), Py_Free(),
PyMem_Malloc(), PyMem_Realloc(), PyMem_Free(), PyMem_NEW(),
PyMem_RESIZE(), PyMem_DEL(), PyMem_XDEL().


File: python-api.info,  Node: Exception Handling,  Next: Utilities,  Prev: Reference Counting,  Up: Top

Exception Handling
******************

   The functions in this chapter will let you handle and raise Python
exceptions.  It is important to understand some of the basics of Python
exception handling.  It works somewhat like the UNIX `errno' variable:
there is a global indicator (per thread) of the last error that
occurred.  Most functions don't clear this on success, but will set it
to indicate the cause of the error on failure.  Most functions also
return an error indicator, usually `NULL' if they are supposed to
return a pointer, or `-1' if they return an integer (exception: the
`PyArg_Parse*()' functions return `1' for success and `0' for failure).
When a function must fail because some function it called failed, it
generally doesn't set the error indicator; the function it called
already set it.

   The error indicator consists of three Python objects corresponding to
the Python variables `sys.exc_type', `sys.exc_value' and
`sys.exc_traceback'.  API functions exist to interact with the error
indicator in various ways.  There is a separate error indicator for
each thread.

`void PyErr_Print()'
     Print a standard traceback to `sys.stderr' and clear the error
     indicator.  Call this function only when the error indicator is
     set.  (Otherwise it will cause a fatal error!)

`PyObject* PyErr_Occurred()'
     Test whether the error indicator is set.  If set, return the
     exception *type* (the first argument to the last call to one of the
     `PyErr_Set*()' functions or to `PyErr_Restore()').  If not set,
     return `NULL'.  You do not own a reference to the return value, so
     you do not need to `Py_DECREF()' it.  *Note:* do not compare the
     return value to a specific exception; use
     `PyErr_ExceptionMatches()' instead, shown below.

`int PyErr_ExceptionMatches(PyObject *exc)'
     Equivalent to `PyErr_GivenExceptionMatches(PyErr_Occurred(), EXC)'.
     This should only be called when an exception is actually set.

`int PyErr_GivenExceptionMatches(PyObject *given, PyObject *exc)'
     Return true if the GIVEN exception matches the exception in EXC.
     If EXC is a class object, this also returns true when GIVEN is a
     subclass.  If EXC is a tuple, all exceptions in the tuple (and
     recursively in subtuples) are searched for a match.  This should
     only be called when an exception is actually set.

`void PyErr_NormalizeException(PyObject**exc, PyObject**val, PyObject**tb)'
     Under certain circumstances, the values returned by
     `PyErr_Fetch()' below can be "unnormalized", meaning that `*EXC'
     is a class object but `*VAL' is not an instance of the  same
     class.  This function can be used to instantiate the class in that
     case.  If the values are already normalized, nothing happens.

`void PyErr_Clear()'
     Clear the error indicator.  If the error indicator is not set,
     there is no effect.

`void PyErr_Fetch(PyObject **ptype, PyObject **pvalue, PyObject **ptraceback)'
     Retrieve the error indicator into three variables whose addresses
     are passed.  If the error indicator is not set, set all three
     variables to `NULL'.  If it is set, it will be cleared and you own
     a reference to each object retrieved.  The value and traceback
     object may be `NULL' even when the type object is not.  *Note:*
     this function is normally only used by code that needs to handle
     exceptions or by code that needs to save and restore the error
     indicator temporarily.

`void PyErr_Restore(PyObject *type, PyObject *value, PyObject *traceback)'
     Set  the error indicator from the three objects.  If the error
     indicator is already set, it is cleared first.  If the objects are
     `NULL', the error indicator is cleared.  Do not pass a `NULL' type
     and non-`NULL' value or traceback.  The exception type should be a
     string or class; if it is a class, the value should be an instance
     of that class.  Do not pass an invalid exception type or value.
     (Violating these rules will cause subtle problems later.)  This
     call takes away a reference to each object, i.e. you must own a
     reference to each object before the call and after the call you no
     longer own these references.  (If you don't understand this, don't
     use this function.  I warned you.)  *Note:* this function is
     normally only used by code that needs to save and restore the
     error indicator temporarily.

`void PyErr_SetString(PyObject *type, char *message)'
     This is the most common way to set the error indicator.  The first
     argument specifies the exception type; it is normally one of the
     standard exceptions, e.g. `PyExc_RuntimeError'.  You need not
     increment its reference count.  The second argument is an error
     message; it is converted to a string object.

`void PyErr_SetObject(PyObject *type, PyObject *value)'
     This function is similar to `PyErr_SetString()' but lets you
     specify an arbitrary Python object for the "value" of the
     exception.  You need not increment its reference count.

`void PyErr_SetNone(PyObject *type)'
     This is a shorthand for `PyErr_SetObject(TYPE, Py_None)'.

`int PyErr_BadArgument()'
     This is a shorthand for `PyErr_SetString(PyExc_TypeError,
     MESSAGE)', where MESSAGE indicates that a built-in operation was
     invoked with an illegal argument.  It is mostly for internal use.

`PyObject* PyErr_NoMemory()'
     This is a shorthand for `PyErr_SetNone(PyExc_MemoryError)'; it
     returns `NULL' so an object allocation function can write `return
     PyErr_NoMemory();' when it runs out of memory.

`PyObject* PyErr_SetFromErrno(PyObject *type)'
     This is a convenience function to raise an exception when a C
     library function has returned an error and set the C variable
     `errno'.  It constructs a tuple object whose first item is the
     integer `errno' value and whose second item is the corresponding
     error message (gotten from `strerror()'), and then calls
     `PyErr_SetObject(TYPE, OBJECT)'.  On UNIX, when the `errno' value
     is `EINTR', indicating an interrupted system call, this calls
     `PyErr_CheckSignals()', and if that set the error indicator,
     leaves it set to that.  The function always returns `NULL', so a
     wrapper function around a system call can write `return
     PyErr_SetFromErrno();' when  the system call returns an error.

`void PyErr_BadInternalCall()'
     This is a shorthand for `PyErr_SetString(PyExc_TypeError,
     MESSAGE)', where MESSAGE indicates that an internal operation
     (e.g. a Python/C API function) was invoked with an illegal
     argument.  It is mostly for internal use.

`int PyErr_CheckSignals()'
     This function interacts with Python's signal handling.  It checks
     whether a signal has been sent to the processes and if so, invokes
     the corresponding signal handler.  If the `signal' module is
     supported, this can invoke a signal handler written in Python.  In
     all cases, the default effect for `SIGINT' is to raise the
     `KeyboadInterrupt' exception.  If an exception is raised the error
     indicator is set and the function returns `1'; otherwise the
     function returns `0'.  The error indicator may or may not be
     cleared if it was previously set.

`void PyErr_SetInterrupt()'
     This function is obsolete (XXX or platform dependent?).  It
     simulates the effect of a `SIGINT' signal arriving -- the next time
     `PyErr_CheckSignals()' is called, `KeyboadInterrupt' will be
     raised.

`PyObject* PyErr_NewException(char *name, PyObject *base, PyObject *dict)'
     This utility function creates and returns a new exception object.
     The NAME argument must be the name of the new exception, a C string
     of the form `module.class'.  The BASE and DICT arguments are
     normally `NULL'.  Normally, this creates a class object derived
     from the root for all exceptions, the built-in name `Exception'
     (accessible in C as `PyExc_Exception').  In this case the
     `__module__' attribute of the new class is set to the first part
     (up to the last dot) of the NAME argument, and the class name is
     set to the last part (after the last dot).  When the user has
     specified the `-X' command line option to use string exceptions,
     for backward compatibility, or when the BASE argument is not a
     class object (and not `NULL'), a string object created from the
     entire NAME argument is returned.  The BASE argument can be used
     to specify an alternate base class.  The DICT argument can be used
     to specify a dictionary of class variables and methods.

* Menu:

* Standard Exceptions::


File: python-api.info,  Node: Standard Exceptions,  Prev: Exception Handling,  Up: Exception Handling

Standard Exceptions
===================

   All standard Python exceptions are available as global variables
whose names are `PyExc_' followed by the Python exception name.  These
have the type `PyObject *'; they are all either class objects or string
objects, depending on the use of the `-X' option to the interpreter.
For completeness, here are all the variables: `PyExc_Exception',
`PyExc_StandardError', `PyExc_ArithmeticError', `PyExc_LookupError',
`PyExc_AssertionError', `PyExc_AttributeError', `PyExc_EOFError',
`PyExc_EnvironmentError', `PyExc_FloatingPointError', `PyExc_IOError',
`PyExc_ImportError', `PyExc_IndexError', `PyExc_KeyError',
`PyExc_KeyboardInterrupt', `PyExc_MemoryError', `PyExc_NameError',
`PyExc_NotImplementedError', `PyExc_OSError', `PyExc_OverflowError',
`PyExc_RuntimeError', `PyExc_SyntaxError', `PyExc_SystemError',
`PyExc_SystemExit', `PyExc_TypeError', `PyExc_ValueError',
`PyExc_ZeroDivisionError'.


File: python-api.info,  Node: Utilities,  Next: Abstract Objects Layer,  Prev: Exception Handling,  Up: Top

Utilities
*********

   The functions in this chapter perform various utility tasks, such as
parsing function arguments and constructing Python values from C values.

* Menu:

* OS Utilities::
* Process Control::
* Importing Modules::


File: python-api.info,  Node: OS Utilities,  Next: Process Control,  Prev: Utilities,  Up: Utilities

OS Utilities
============

`int Py_FdIsInteractive(FILE *fp, char *filename)'
     Return true (nonzero) if the standard I/O file FP with name
     FILENAME is deemed interactive.  This is the case for files for
     which `isatty(fileno(FP))' is true.  If the global flag
     `Py_InteractiveFlag' is true, this function also returns true if
     the NAME pointer is `NULL' or if the name is equal to one of the
     strings `"<stdin>"' or `"???"'.

`long PyOS_GetLastModificationTime(char *filename)'
     Return the time of last modification of the file FILENAME.  The
     result is encoded in the same way as the timestamp returned by the
     standard C library function `time()'.


File: python-api.info,  Node: Process Control,  Next: Importing Modules,  Prev: OS Utilities,  Up: Utilities

Process Control
===============

`void Py_FatalError(char *message)'
     Print a fatal error message and kill the process.  No cleanup is
     performed.  This function should only be invoked when a condition
     is detected that would make it dangerous to continue using the
     Python interpreter; e.g., when the object administration appears
     to be corrupted.  On UNIX, the standard C library function
     `abort()' is called which will attempt to produce a `core' file.

`void Py_Exit(int status)'
     Exit the current process.  This calls `Py_Finalize()' and then
     calls the standard C library function `exit(STATUS)'.

`int Py_AtExit(void (*func) ())'
     Register a cleanup function to be called by `Py_Finalize()'.  The
     cleanup function will be called with no arguments and should
     return no value.  At most 32 cleanup functions can be registered.
     When the registration is successful, `Py_AtExit()' returns `0'; on
     failure, it returns `-1'.  The cleanup function registered last is
     called first.  Each cleanup function will be called at most once.
     Since Python's internal finallization will have completed before
     the cleanup function, no Python APIs should be called by FUNC.


File: python-api.info,  Node: Importing Modules,  Prev: Process Control,  Up: Utilities

Importing Modules
=================

`PyObject* PyImport_ImportModule(char *name)'
     This is a simplified interface to `PyImport_ImportModuleEx()'
     below, leaving the GLOBALS and LOCALS arguments set to `NULL'.
     When the NAME argument contains a dot (i.e., when it specifies a
     submodule of a package), the FROMLIST argument is set to the list
     `['*']' so that the return value is the named module rather than
     the top-level package containing it as would otherwise be the
     case.  (Unfortunately, this has an additional side effect when
     NAME in fact specifies a subpackage instead of a submodule: the
     submodules specified in the package's `__all__' variable are
     loaded.)  Return a new reference to the imported module, or `NULL'
     with an exception set on failure (the module may still be created
     in this case -- examine `sys.modules' to find out).

`PyObject* PyImport_ImportModuleEx(char *name, PyObject *globals, PyObject *locals, PyObject *fromlist)'
     Import a module.  This is best described by referring to the
     built-in Python function `__import__()', as the standard
     `__import__()' function calls this function directly.

     The return value is a new reference to the imported module or
     top-level package, or `NULL' with an exception set on failure (the
     module may still be created in this case).  Like for
     `__import__()', the return value when a submodule of a package was
     requested is normally the top-level package, unless a non-empty
     FROMLIST was given.

`PyObject* PyImport_Import(PyObject *name)'
     This is a higher-level interface that calls the current "import
     hook function".  It invokes the `__import__()' function from the
     `__builtins__' of the current globals.  This means that the import
     is done using whatever import hooks are installed in the current
     environment, e.g. by `rexec' or `ihooks'.

`PyObject* PyImport_ReloadModule(PyObject *m)'
     Reload a module.  This is best described by referring to the
     built-in Python function `reload()', as the standard `reload()'
     function calls this function directly.  Return a new reference to
     the reloaded module, or `NULL' with an exception set on failure
     (the module still exists in this case).

`PyObject* PyImport_AddModule(char *name)'
     Return the module object corresponding to a module name.  The NAME
     argument may be of the form `package.module').  First check the
     modules dictionary if there's one there, and if not, create a new
     one and insert in in the modules dictionary.  Because the former
     action is most common, this does not return a new reference, and
     you do not own the returned reference.  Warning: this function
     does not load or import the module; if the module wasn't already
     loaded, you will get an empty module object.  Use
     `PyImport_ImportModule()' or one of its variants to import a
     module.  Return `NULL' with an exception set on failure.  *Note:*
     this function returns a "borrowed" reference.

`PyObject* PyImport_ExecCodeModule(char *name, PyObject *co)'
     Given a module name (possibly of the form `package.module') and a
     code object read from a Python bytecode file or obtained from the
     built-in function `compile()', load the module.  Return a new
     reference to the module object, or `NULL' with an exception set if
     an error occurred (the module may still be created in this case).
     (This function would reload the module if it was already imported.)

`long PyImport_GetMagicNumber()'
     Return the magic number for Python bytecode files (a.k.a. `.pyc'
     and `.pyo' files).  The magic number should be present in the
     first four bytes of the bytecode file, in little-endian byte order.

`PyObject* PyImport_GetModuleDict()'
     Return the dictionary used for the module administration (a.k.a.
     `sys.modules').  Note that this is a per-interpreter variable.

`void _PyImport_Init()'
     Initialize the import mechanism.  For internal use only.

`void PyImport_Cleanup()'
     Empty the module table.  For internal use only.

`void _PyImport_Fini()'
     Finalize the import mechanism.  For internal use only.

`PyObject* _PyImport_FindExtension(char *, char *)'
     For internal use only.

`PyObject* _PyImport_FixupExtension(char *, char *)'
     For internal use only.

`int PyImport_ImportFrozenModule(char *)'
     Load a frozen module.  Return `1' for success, `0' if the module
     is not found, and `-1' with an exception set if the initialization
     failed.  To access the imported module on a successful load, use
     `PyImport_ImportModule()'.  (Note the misnomer -- this function
     would reload the module if it was already imported.)

`struct _frozen'
     This is the structure type definition for frozen module
     descriptors, as generated by the `freeze' utility (see
     `Tools/freeze/' in the Python source distribution).  Its
     definition is:

          struct _frozen {
              char *name;
              unsigned char *code;
              int size;
          };

`struct _frozen* PyImport_FrozenModules'
     This pointer is initialized to point to an array of `struct
     _frozen' records, terminated by one whose members are all `NULL'
     or zero.  When a frozen module is imported, it is searched in this
     table.  Third-party code could play tricks with this to provide a
     dynamically created collection of frozen modules.


File: python-api.info,  Node: Abstract Objects Layer,  Next: Concrete Objects Layer,  Prev: Utilities,  Up: Top

Abstract Objects Layer
**********************

   The functions in this chapter interact with Python objects regardless
of their type, or with wide classes of object types (e.g. all numerical
types, or all sequence types).  When used on object types for which
they do not apply, they will flag a Python exception.

* Menu:

* Object Protocol::
* Number Protocol::
* Sequence Protocol::
* Mapping Protocol::
* Constructors::

