1 //-----------------------------------------------------------------------------
3 // Copyright (c) 1998 - 2007, The Regents of the University of California
4 // Produced at the Lawrence Livermore National Laboratory
5 // All rights reserved.
7 // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The
8 // full copyright notice is contained in the file COPYRIGHT located at the root
9 // of the PyCXX distribution.
11 // Redistribution and use in source and binary forms, with or without
12 // modification, are permitted provided that the following conditions are met:
14 // - Redistributions of source code must retain the above copyright notice,
15 // this list of conditions and the disclaimer below.
16 // - Redistributions in binary form must reproduce the above copyright notice,
17 // this list of conditions and the disclaimer (as noted below) in the
18 // documentation and/or materials provided with the distribution.
19 // - Neither the name of the UC/LLNL nor the names of its contributors may be
20 // used to endorse or promote products derived from this software without
21 // specific prior written permission.
23 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
24 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26 // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF
27 // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR
28 // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29 // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
30 // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
31 // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33 // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
36 //-----------------------------------------------------------------------------
38 #ifndef __CXX_Exception_h
39 #define __CXX_Exception_h
41 #include "CXX/WrapPython.h"
42 #include "CXX/Version.hxx"
43 #include "CXX/Python3/Config.hxx"
44 #include "CXX/Python3/CxxDebug.hxx"
45 #include "CXX/Python3/IndirectPythonInterface.hxx"
50 // This mimics the Python structure, in order to minimize confusion
53 class ExtensionExceptionType
;
60 Exception( ExtensionExceptionType
&exception
, const std::string
&reason
);
61 Exception( ExtensionExceptionType
&exception
, Object
&reason
);
66 Exception (const std::string
&reason
)
68 PyErr_SetString( Py::_Exc_RuntimeError(), reason
.c_str() );
71 Exception( PyObject
*exception
, const std::string
&reason
)
73 PyErr_SetString( exception
, reason
.c_str() );
76 Exception( PyObject
*exception
, Object
&reason
);
78 void clear() // clear the error
79 // technically but not philosophically const
87 class StandardError
: public Exception
90 explicit StandardError()
94 class LookupError
: public StandardError
97 explicit LookupError()
101 class ArithmeticError
: public StandardError
104 explicit ArithmeticError()
108 class EnvironmentError
: public StandardError
111 explicit EnvironmentError()
117 class TypeError
: public StandardError
120 TypeError (const std::string
& reason
)
123 PyErr_SetString( Py::_Exc_TypeError(),reason
.c_str() );
127 class IndexError
: public LookupError
130 IndexError (const std::string
& reason
)
133 PyErr_SetString( Py::_Exc_IndexError(), reason
.c_str() );
137 class AttributeError
: public StandardError
140 AttributeError (const std::string
& reason
)
143 PyErr_SetString( Py::_Exc_AttributeError(), reason
.c_str() );
147 class NameError
: public StandardError
150 NameError (const std::string
& reason
)
153 PyErr_SetString( Py::_Exc_NameError(), reason
.c_str() );
157 class RuntimeError
: public StandardError
160 RuntimeError (const std::string
& reason
)
163 PyErr_SetString( Py::_Exc_RuntimeError(), reason
.c_str() );
167 class NotImplementedError
: public StandardError
170 NotImplementedError (const std::string
& reason
)
173 PyErr_SetString (Py::_Exc_NotImplementedError(), reason
.c_str());
177 class SystemError
: public StandardError
180 SystemError (const std::string
& reason
)
183 PyErr_SetString( Py::_Exc_SystemError(),reason
.c_str() );
187 class KeyError
: public LookupError
190 KeyError (const std::string
& reason
)
193 PyErr_SetString( Py::_Exc_KeyError(),reason
.c_str() );
198 class ValueError
: public StandardError
201 ValueError (const std::string
& reason
)
204 PyErr_SetString( Py::_Exc_ValueError(), reason
.c_str() );
208 class OverflowError
: public ArithmeticError
211 OverflowError (const std::string
& reason
)
214 PyErr_SetString( Py::_Exc_OverflowError(), reason
.c_str() );
218 class ZeroDivisionError
: public ArithmeticError
221 ZeroDivisionError (const std::string
& reason
)
224 PyErr_SetString( Py::_Exc_ZeroDivisionError(), reason
.c_str() );
228 class FloatingPointError
: public ArithmeticError
231 FloatingPointError (const std::string
& reason
)
234 PyErr_SetString( Py::_Exc_FloatingPointError(), reason
.c_str() );
238 class MemoryError
: public StandardError
241 MemoryError (const std::string
& reason
)
244 PyErr_SetString( Py::_Exc_MemoryError(), reason
.c_str() );
248 class SystemExit
: public StandardError
251 SystemExit (const std::string
& reason
)
254 PyErr_SetString( Py::_Exc_SystemExit(),reason
.c_str() );