Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
PyException.h
Go to the documentation of this file.
1#ifndef CPYRT_PYEXCEPTION_H
2#define CPYRT_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 cpyrt 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 "cpyrt/CommonDefs.h"
35
36namespace cppjit::cpyrt {
37
38class CPYRT_CLASS_EXTERN PyException : public std::exception {
39public:
41 ~PyException() noexcept override;
42
43 // give reason for raised exception
44 const char* what() const noexcept override;
45
46 // clear Python error, to allow full error handling C++ side
47 void clear() const noexcept;
48
49private:
50 std::string fMsg;
51};
52
53} // namespace cppjit::cpyrt
54
55#endif // !CPYRT_PYEXCEPTION_H
#define CPYRT_CLASS_EXTERN
Definition CommonDefs.h:29
static const char * what
Definition stlLoader.cc:5