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/Config.hxx"
44
#include "CXX/IndirectPythonInterface.hxx"
49
// This mimics the Python structure, in order to minimize confusion
52
class ExtensionExceptionType;
59
Exception( ExtensionExceptionType &exception, const std::string& reason );
60
Exception( ExtensionExceptionType &exception, Object &reason );
65
Exception (const std::string& reason)
67
PyErr_SetString (Py::_Exc_RuntimeError(), reason.c_str());
70
Exception (PyObject* exception, const std::string& reason)
72
PyErr_SetString (exception, reason.c_str());
75
Exception (PyObject* exception, Object &reason);
77
void clear() // clear the error
78
// technically but not philosophically const
86
class StandardError: public Exception
89
explicit StandardError()
93
class LookupError: public StandardError
96
explicit LookupError()
100
class ArithmeticError: public StandardError
103
explicit ArithmeticError()
107
class EnvironmentError: public StandardError
110
explicit EnvironmentError()
116
class TypeError: public StandardError
119
TypeError (const std::string& reason)
122
PyErr_SetString (Py::_Exc_TypeError(),reason.c_str());
126
class IndexError: public LookupError
129
IndexError (const std::string& reason)
132
PyErr_SetString (Py::_Exc_IndexError(), reason.c_str());
136
class AttributeError: public StandardError
139
AttributeError (const std::string& reason)
142
PyErr_SetString (Py::_Exc_AttributeError(), reason.c_str());
146
class NameError: public StandardError
149
NameError (const std::string& reason)
152
PyErr_SetString (Py::_Exc_NameError(), reason.c_str());
156
class RuntimeError: public StandardError
159
RuntimeError (const std::string& reason)
162
PyErr_SetString (Py::_Exc_RuntimeError(), reason.c_str());
166
class SystemError: public StandardError
169
SystemError (const std::string& reason)
172
PyErr_SetString (Py::_Exc_SystemError(),reason.c_str());
176
class KeyError: public LookupError
179
KeyError (const std::string& reason)
182
PyErr_SetString (Py::_Exc_KeyError(),reason.c_str());
187
class ValueError: public StandardError
190
ValueError (const std::string& reason)
193
PyErr_SetString (Py::_Exc_ValueError(), reason.c_str());
197
class OverflowError: public ArithmeticError
200
OverflowError (const std::string& reason)
203
PyErr_SetString (Py::_Exc_OverflowError(), reason.c_str());
207
class ZeroDivisionError: public ArithmeticError
210
ZeroDivisionError (const std::string& reason)
213
PyErr_SetString (Py::_Exc_ZeroDivisionError(), reason.c_str());
217
class FloatingPointError: public ArithmeticError
220
FloatingPointError (const std::string& reason)
223
PyErr_SetString (Py::_Exc_FloatingPointError(), reason.c_str());
227
class MemoryError: public StandardError
230
MemoryError (const std::string& reason)
233
PyErr_SetString (Py::_Exc_MemoryError(), reason.c_str());
237
class SystemExit: public StandardError
240
SystemExit (const std::string& reason)
243
PyErr_SetString (Py::_Exc_SystemExit(),reason.c_str());