Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
PyException.h
Go to the documentation of this file.
1#ifndef CPYCPPYY_PYEXCEPTION_H
2#define CPYCPPYY_PYEXCEPTION_H
3
4//////////////////////////////////////////////////////////////////////////////
5// //
6// PyException //
7// //
8// Purpose: A C++ exception class for throwing python exceptions //
9// through C++ code. //
10// Created: Apr, 2004, Scott Snyder, from the version in D0's python_util. //
11// //
12// The situation is: //
13// - We're calling C++ code from python. //
14// - The C++ code can call back to python. //
15// - What to do then if the python callback throws an exception? //
16// //
17// We need to get the control flow back to where CPyCppyy calls C++. //
18// To do that we throw a TPyException. //
19// We can then catch this exception when we do the C++ call. //
20// //
21// Note that we don't need to save any state in the exception -- it's //
22// already in the python error info variables. //
23// (??? Actually, if the program is multithreaded, this is dangerous //
24// if the code has released and reacquired the lock along the call chain. //
25// Punt on this for now, though.) //
26// //
27//////////////////////////////////////////////////////////////////////////////
28
29// Standard
30#include <exception>
31#include <string>
32
33// Bindings
34#include "CPyCppyy/CommonDefs.h"
35
36
37namespace CPyCppyy {
38
39class CPYCPPYY_CLASS_EXTERN PyException : public std::exception {
40public:
42 virtual ~PyException() noexcept;
43
44// give reason for raised exception
45 virtual const char* what() const noexcept;
46
47// clear Python error, to allow full error handling C++ side
48 void clear() const noexcept;
49
50private:
51 std::string fMsg;
52};
53
54} // namespace CPyCppyy
55
56#endif // !CPYCPPYY_PYEXCEPTION_H
#define CPYCPPYY_CLASS_EXTERN
Definition CommonDefs.h:29
static const char * what
Definition stlLoader.cc:5