\section{Built-in Exceptions}

\declaremodule{standard}{exceptions}
\modulesynopsis{Standard exceptions classes.}


Exceptions can be class objects or string objects.  Though most
exceptions have been string objects in past versions of Python, in
Python 1.5 and newer versions, all standard exceptions have been
converted to class objects, and users are encouraged to do the same.
The exceptions are defined in the module \module{exceptions}.  This
module never needs to be imported explicitly: the exceptions are
provided in the built-in namespace as well as the \module{exceptions}
module.

Two distinct string objects with the same value are considered different
exceptions.  This is done to force programmers to use exception names
rather than their string value when specifying exception handlers.
The string value of all built-in exceptions is their name, but this is
not a requirement for user-defined exceptions or exceptions defined by
library modules.

For class exceptions, in a \keyword{try}\stindex{try} statement with
an \keyword{except}\stindex{except} clause that mentions a particular
class, that clause also handles any exception classes derived from
that class (but not exception classes from which \emph{it} is
derived).  Two exception classes that are not related via subclassing
are never equivalent, even if they have the same name.

The built-in exceptions listed below can be generated by the
interpreter or built-in functions.  Except where mentioned, they have
an ``associated value'' indicating the detailed cause of the error.
This may be a string or a tuple containing several items of
information (e.g., an error code and a string explaining the code).
The associated value is the second argument to the
\keyword{raise}\stindex{raise} statement.  For string exceptions, the
associated value itself will be stored in the variable named as the
second argument of the \keyword{except} clause (if any).  For class
exceptions, that variable receives the exception instance.  If the
exception class is derived from the standard root class
\exception{Exception}, the associated value is present as the
exception instance's \member{args} attribute, and possibly on other
attributes as well.

User code can raise built-in exceptions.  This can be used to test an
exception handler or to report an error condition ``just like'' the
situation in which the interpreter raises the same exception; but
beware that there is nothing to prevent user code from raising an
inappropriate error.

The built-in exception classes can be sub-classed to define new
exceptions; programmers are encouraged to at least derive new
exceptions from the \exception{Exception} base class.  More
information on defining exceptions is available in the
\citetitle[../tut/tut.html]{Python Tutorial} under the heading
``User-defined Exceptions.''

\setindexsubitem{(built-in exception base class)}

The following exceptions are only used as base classes for other
exceptions.

\begin{excdesc}{Exception}
The root class for exceptions.  All built-in exceptions are derived
from this class.  All user-defined exceptions should also be derived
from this class, but this is not (yet) enforced.  The \function{str()}
function, when applied to an instance of this class (or most derived
classes) returns the string value of the argument or arguments, or an
empty string if no arguments were given to the constructor.  When used
as a sequence, this accesses the arguments given to the constructor
(handy for backward compatibility with old code).  The arguments are
also available on the instance's \member{args} attribute, as a tuple.
\end{excdesc}

\begin{excdesc}{StandardError}
The base class for all built-in exceptions except
\exception{StopIteration} and \exception{SystemExit}.
\exception{StandardError} itself is derived from the root class
\exception{Exception}.
\end{excdesc}

\begin{excdesc}{ArithmeticError}
The base class for those built-in exceptions that are raised for
various arithmetic errors: \exception{OverflowError},
\exception{ZeroDivisionError}, \exception{FloatingPointError}.
\end{excdesc}

\begin{excdesc}{LookupError}
The base class for the exceptions that are raised when a key or
index used on a mapping or sequence is invalid: \exception{IndexError},
\exception{KeyError}.  This can be raised directly by
\function{sys.setdefaultencoding()}.
\end{excdesc}

\begin{excdesc}{EnvironmentError}
The base class for exceptions that
can occur outside the Python system: \exception{IOError},
\exception{OSError}.  When exceptions of this type are created with a
2-tuple, the first item is available on the instance's \member{errno}
attribute (it is assumed to be an error number), and the second item
is available on the \member{strerror} attribute (it is usually the
associated error message).  The tuple itself is also available on the
\member{args} attribute.
\versionadded{1.5.2}

When an \exception{EnvironmentError} exception is instantiated with a
3-tuple, the first two items are available as above, while the third
item is available on the \member{filename} attribute.  However, for
backwards compatibility, the \member{args} attribute contains only a
2-tuple of the first two constructor arguments.

The \member{filename} attribute is \code{None} when this exception is
created with other than 3 arguments.  The \member{errno} and
\member{strerror} attributes are also \code{None} when the instance was
created with other than 2 or 3 arguments.  In this last case,
\member{args} contains the verbatim constructor arguments as a tuple.
\end{excdesc}


\setindexsubitem{(built-in exception)}

The following exceptions are the exceptions that are actually raised.

\begin{excdesc}{AssertionError}
\stindex{assert}
Raised when an \keyword{assert} statement fails.
\end{excdesc}

\begin{excdesc}{AttributeError}
% xref to attribute reference?
  Raised when an attribute reference or assignment fails.  (When an
  object does not support attribute references or attribute assignments
  at all, \exception{TypeError} is raised.)
\end{excdesc}

\begin{excdesc}{EOFError}
% XXXJH xrefs here
  Raised when one of the built-in functions (\function{input()} or
  \function{raw_input()}) hits an end-of-file condition (\EOF) without
  reading any data.
% XXXJH xrefs here
  (N.B.: the \method{read()} and \method{readline()} methods of file
  objects return an empty string when they hit \EOF.)
\end{excdesc}

\begin{excdesc}{FloatingPointError}
  Raised when a floating point operation fails.  This exception is
  always defined, but can only be raised when Python is configured
  with the \longprogramopt{with-fpectl} option, or the
  \constant{WANT_SIGFPE_HANDLER} symbol is defined in the
  \file{pyconfig.h} file.
\end{excdesc}

\begin{excdesc}{IOError}
% XXXJH xrefs here
  Raised when an I/O operation (such as a \keyword{print} statement,
  the built-in \function{open()} function or a method of a file
  object) fails for an I/O-related reason, e.g., ``file not found'' or
  ``disk full''.

  This class is derived from \exception{EnvironmentError}.  See the
  discussion above for more information on exception instance
  attributes.
\end{excdesc}

\begin{excdesc}{ImportError}
% XXXJH xref to import statement?
  Raised when an \keyword{import} statement fails to find the module
  definition or when a \code{from \textrm{\ldots} import} fails to find a
  name that is to be imported.
\end{excdesc}

\begin{excdesc}{IndexError}
% XXXJH xref to sequences
  Raised when a sequence subscript is out of range.  (Slice indices are
  silently truncated to fall in the allowed range; if an index is not a
  plain integer, \exception{TypeError} is raised.)
\end{excdesc}

\begin{excdesc}{KeyError}
% XXXJH xref to mapping objects?
  Raised when a mapping (dictionary) key is not found in the set of
  existing keys.
\end{excdesc}

\begin{excdesc}{KeyboardInterrupt}
  Raised when the user hits the interrupt key (normally
  \kbd{Control-C} or \kbd{Delete}).  During execution, a check for
  interrupts is made regularly.
% XXXJH xrefs here
  Interrupts typed when a built-in function \function{input()} or
  \function{raw_input()}) is waiting for input also raise this
  exception.
\end{excdesc}

\begin{excdesc}{MemoryError}
  Raised when an operation runs out of memory but the situation may
  still be rescued (by deleting some objects).  The associated value is
  a string indicating what kind of (internal) operation ran out of memory.
  Note that because of the underlying memory management architecture
  (C's \cfunction{malloc()} function), the interpreter may not
  always be able to completely recover from this situation; it
  nevertheless raises an exception so that a stack traceback can be
  printed, in case a run-away program was the cause.
\end{excdesc}

\begin{excdesc}{NameError}
  Raised when a local or global name is not found.  This applies only
  to unqualified names.  The associated value is an error message that
  includes the name that could not be found.
\end{excdesc}

\begin{excdesc}{NotImplementedError}
  This exception is derived from \exception{RuntimeError}.  In user
  defined base classes, abstract methods should raise this exception
  when they require derived classes to override the method.
  \versionadded{1.5.2}
\end{excdesc}

\begin{excdesc}{OSError}
  %xref for os module
  This class is derived from \exception{EnvironmentError} and is used
  primarily as the \refmodule{os} module's \code{os.error} exception.
  See \exception{EnvironmentError} above for a description of the
  possible associated values.
  \versionadded{1.5.2}
\end{excdesc}

\begin{excdesc}{OverflowError}
% XXXJH reference to long's and/or int's?
  Raised when the result of an arithmetic operation is too large to be
  represented.  This cannot occur for long integers (which would rather
  raise \exception{MemoryError} than give up).  Because of the lack of
  standardization of floating point exception handling in C, most
  floating point operations also aren't checked.  For plain integers,
  all operations that can overflow are checked except left shift, where
  typical applications prefer to drop bits than raise an exception.
\end{excdesc}

\begin{excdesc}{ReferenceError}
  This exception is raised when a weak reference proxy, created by the
  \function{\refmodule{weakref}.proxy()} function, is used to access
  an attribute of the referent after it has been garbage collected.
  For more information on weak references, see the \refmodule{weakref}
  module.
  \versionadded[Previously known as the
                \exception{\refmodule{weakref}.ReferenceError}
                exception]{2.2}
\end{excdesc}

\begin{excdesc}{RuntimeError}
  Raised when an error is detected that doesn't fall in any of the
  other categories.  The associated value is a string indicating what
  precisely went wrong.  (This exception is mostly a relic from a
  previous version of the interpreter; it is not used very much any
  more.)
\end{excdesc}

\begin{excdesc}{StopIteration}
  Raised by an iterator's \method{next()} method to signal that there
  are no further values.
  This is derived from \exception{Exception} rather than
  \exception{StandardError}, since this is not considered an error in
  its normal application.
  \versionadded{2.2}
\end{excdesc}

\begin{excdesc}{SyntaxError}
% XXXJH xref to these functions?
  Raised when the parser encounters a syntax error.  This may occur in
  an \keyword{import} statement, in an \keyword{exec} statement, in a call
  to the built-in function \function{eval()} or \function{input()}, or
  when reading the initial script or standard input (also
  interactively).

  Instances of this class have atttributes \member{filename},
  \member{lineno}, \member{offset} and \member{text} for easier access
  to the details.  \function{str()} of the exception instance returns
  only the message.
\end{excdesc}

\begin{excdesc}{SystemError}
  Raised when the interpreter finds an internal error, but the
  situation does not look so serious to cause it to abandon all hope.
  The associated value is a string indicating what went wrong (in
  low-level terms).
  
  You should report this to the author or maintainer of your Python
  interpreter.  Be sure to report the version of the Python
  interpreter (\code{sys.version}; it is also printed at the start of an
  interactive Python session), the exact error message (the exception's
  associated value) and if possible the source of the program that
  triggered the error.
\end{excdesc}

\begin{excdesc}{SystemExit}
% XXXJH xref to module sys?
  This exception is raised by the \function{sys.exit()} function.  When it
  is not handled, the Python interpreter exits; no stack traceback is
  printed.  If the associated value is a plain integer, it specifies the
  system exit status (passed to C's \cfunction{exit()} function); if it is
  \code{None}, the exit status is zero; if it has another type (such as
  a string), the object's value is printed and the exit status is one.

  Instances have an attribute \member{code} which is set to the
  proposed exit status or error message (defaulting to \code{None}).
  Also, this exception derives directly from \exception{Exception} and
  not \exception{StandardError}, since it is not technically an error.

  A call to \function{sys.exit()} is translated into an exception so that
  clean-up handlers (\keyword{finally} clauses of \keyword{try} statements)
  can be executed, and so that a debugger can execute a script without
  running the risk of losing control.  The \function{os._exit()} function
  can be used if it is absolutely positively necessary to exit
  immediately (for example, in the child process after a call to
  \function{fork()}).
\end{excdesc}

\begin{excdesc}{TypeError}
  Raised when a built-in operation or function is applied to an object
  of inappropriate type.  The associated value is a string giving
  details about the type mismatch.
\end{excdesc}

\begin{excdesc}{UnboundLocalError}
  Raised when a reference is made to a local variable in a function or
  method, but no value has been bound to that variable.  This is a
  subclass of \exception{NameError}.
\versionadded{2.0}
\end{excdesc}

\begin{excdesc}{UnicodeError}
  Raised when a Unicode-related encoding or decoding error occurs.  It
  is a subclass of \exception{ValueError}.
\versionadded{2.0}
\end{excdesc}

\begin{excdesc}{UnicodeEncodeError}
  Raised when a Unicode-related error occurs during encoding.  It
  is a subclass of \exception{UnicodeError}.
\versionadded{2.3}
\end{excdesc}

\begin{excdesc}{UnicodeDecodeError}
  Raised when a Unicode-related error occurs during decoding.  It
  is a subclass of \exception{UnicodeError}.
\versionadded{2.3}
\end{excdesc}

\begin{excdesc}{UnicodeTranslateError}
  Raised when a Unicode-related error occurs during translating.  It
  is a subclass of \exception{UnicodeError}.
\versionadded{2.3}
\end{excdesc}

\begin{excdesc}{ValueError}
  Raised when a built-in operation or function receives an argument
  that has the right type but an inappropriate value, and the
  situation is not described by a more precise exception such as
  \exception{IndexError}.
\end{excdesc}

\begin{excdesc}{WindowsError}
  Raised when a Windows-specific error occurs or when the error number
  does not correspond to an \cdata{errno} value.  The
  \member{errno} and \member{strerror} values are created from the
  return values of the \cfunction{GetLastError()} and
  \cfunction{FormatMessage()} functions from the Windows Platform API.
  This is a subclass of \exception{OSError}.
\versionadded{2.0}
\end{excdesc}

\begin{excdesc}{ZeroDivisionError}
  Raised when the second argument of a division or modulo operation is
  zero.  The associated value is a string indicating the type of the
  operands and the operation.
\end{excdesc}


\setindexsubitem{(built-in warning)}

The following exceptions are used as warning categories; see the
\refmodule{warnings} module for more information.

\begin{excdesc}{Warning}
Base class for warning categories.
\end{excdesc}

\begin{excdesc}{UserWarning}
Base class for warnings generated by user code.
\end{excdesc}

\begin{excdesc}{DeprecationWarning}
Base class for warnings about deprecated features.
\end{excdesc}

\begin{excdesc}{PendingDeprecationWarning}
Base class for warnings about features which will be deprecated in the future.
\end{excdesc}

\begin{excdesc}{SyntaxWarning}
Base class for warnings about dubious syntax
\end{excdesc}

\begin{excdesc}{RuntimeWarning}
Base class for warnings about dubious runtime behavior.
\end{excdesc}

\begin{excdesc}{FutureWarning}
Base class for warnings about constructs that will change semantically
in the future.
\end{excdesc}

The class hierarchy for built-in exceptions is:

\begin{verbatim}
    Exception
     +-- SystemExit
     +-- StopIteration
     +-- StandardError
     |    +-- KeyboardInterrupt
     |    +-- ImportError
     |    +-- EnvironmentError
     |    |    +-- IOError
     |    |    +-- OSError
     |    |         +-- WindowsError
     |    +-- EOFError
     |    +-- RuntimeError
     |    |    +-- NotImplementedError
     |    +-- NameError
     |    |    +-- UnboundLocalError
     |    +-- AttributeError
     |    +-- SyntaxError
     |    |    +-- IndentationError
     |    |         +-- TabError
     |    +-- TypeError
     |    +-- AssertionError
     |    +-- LookupError
     |    |    +-- IndexError
     |    |    +-- KeyError
     |    +-- ArithmeticError
     |    |    +-- OverflowError
     |    |    +-- ZeroDivisionError
     |    |    +-- FloatingPointError
     |    +-- ValueError
     |    |    +-- UnicodeError
     |    |        +-- UnicodeEncodeError
     |    |        +-- UnicodeDecodeError
     |    |        +-- UnicodeTranslateError
     |    +-- ReferenceError
     |    +-- SystemError
     |    +-- MemoryError
     +---Warning
	  +-- UserWarning
	  +-- DeprecationWarning
	  +-- PendingDeprecationWarning
	  +-- SyntaxWarning
	  +-- OverflowWarning
	  +-- RuntimeWarning
	  +-- FutureWarning
\end{verbatim}
