LSST Applications g0f08755f38+9c285cab97,g1635faa6d4+13f3999e92,g1653933729+a8ce1bb630,g1a0ca8cf93+bf6eb00ceb,g28da252d5a+0829b12dee,g29321ee8c0+5700dc9eac,g2bbee38e9b+9634bc57db,g2bc492864f+9634bc57db,g2cdde0e794+c2c89b37c4,g3156d2b45e+41e33cbcdc,g347aa1857d+9634bc57db,g35bb328faa+a8ce1bb630,g3a166c0a6a+9634bc57db,g3e281a1b8c+9f2c4e2fc3,g414038480c+077ccc18e7,g41af890bb2+fde0dd39b6,g5fbc88fb19+17cd334064,g781aacb6e4+a8ce1bb630,g80478fca09+55a9465950,g82479be7b0+d730eedb7d,g858d7b2824+9c285cab97,g9125e01d80+a8ce1bb630,g9726552aa6+10f999ec6a,ga5288a1d22+2a84bb7594,gacf8899fa4+c69c5206e8,gae0086650b+a8ce1bb630,gb58c049af0+d64f4d3760,gc28159a63d+9634bc57db,gcf0d15dbbd+4b7d09cae4,gda3e153d99+9c285cab97,gda6a2b7d83+4b7d09cae4,gdaeeff99f8+1711a396fd,ge2409df99d+5e831397f4,ge79ae78c31+9634bc57db,gf0baf85859+147a0692ba,gf3967379c6+41c94011de,gf3fb38a9a8+8f07a9901b,gfb92a5be7c+9c285cab97,w.2024.46
LSST Data Management Base Package
Loading...
Searching...
No Matches
Public Member Functions | List of all members
lsst.pex::exceptions::Exception Class Reference

Provides consistent interface for LSST exceptions. More...

#include <Exception.h>

Inheritance diagram for lsst.pex::exceptions::Exception:
std::exception lsst.pex::exceptions::LogicError lsst.pex::exceptions::NotFoundError lsst.pex::exceptions::RuntimeError lsst.pex::exceptions::DomainError lsst.pex::exceptions::InvalidParameterError lsst.pex::exceptions::LengthError lsst.pex::exceptions::OutOfRangeError lsst.pex::exceptions::TypeError lsst::afw::geom::polygon::SinglePolygonException lsst::afw::typehandling::UnsupportedOperationException lsst::geom::SingularTransformException lsst::meas::base::FatalAlgorithmError lsst::meas::base::MeasurementError lsst::meas::extensions::photometryKron::BadKronException lsst.pex::exceptions::IoError lsst.pex::exceptions::OverflowError lsst.pex::exceptions::RangeError lsst.pex::exceptions::UnderflowError

Public Member Functions

 Exception (char const *file, int line, char const *func, std::string const &message)
 Standard constructor, intended for C++ use via the LSST_EXCEPT() macro.
 
 Exception (std::string const &message)
 Message-only constructor, intended for use from Python only.
 
virtual ~Exception (void) noexcept
 
void addMessage (char const *file, int line, char const *func, std::string const &message)
 Add a tracepoint and a message to an exception before rethrowing it (access via LSST_EXCEPT_ADD).
 
Traceback const & getTraceback (void) const noexcept
 Retrieve the list of tracepoints associated with an exception.
 
virtual std::ostreamaddToStream (std::ostream &stream) const
 Add a text representation of this exception, including its traceback with messages, to a stream.
 
virtual char const * what (void) const noexcept
 Return a character string summarizing this exception.
 
virtual char const * getType (void) const noexcept
 Return the fully-specified C++ type of a pointer to the exception.
 
virtual Exceptionclone (void) const
 Return a copy of the exception as an Exception pointer.
 
what (T... args)
 

Detailed Description

Provides consistent interface for LSST exceptions.

All exceptions defined by the LSST Stack are derived from this class. Code should not throw or catch Exception directly, but should instead be written in terms of the appropriate subclasses (e.g., catch RuntimeError to handle all unknown errors).

In Python, this exception inherits from builtins.Exception.

Definition at line 107 of file Exception.h.

Constructor & Destructor Documentation

◆ Exception() [1/2]

Exception::Exception ( char const * file,
int line,
char const * func,
std::string const & message )

Standard constructor, intended for C++ use via the LSST_EXCEPT() macro.

Parameters
[in]fileFilename (automatically passed in by macro).
[in]lineLine number (automatically passed in by macro).
[in]funcFunction name (automatically passed in by macro).
[in]messageInformational string attached to exception.

Definition at line 42 of file Exception.cc.

43 : _message(message), _traceback(1, Tracepoint(file, line, func, message)) {}

◆ Exception() [2/2]

Exception::Exception ( std::string const & message)
explicit

Message-only constructor, intended for use from Python only.

While this constructor can be called from C++, it's better to use the LSST_EXCEPT macro there, which stores file/line/function information as well. In Python, however, that information is stored outside the exception, so we don't want to duplicate it, and hence this constructor is invoked instead.

Parameters
[in]messageInformational string attached to exception.

Definition at line 45 of file Exception.cc.

45: _message(message), _traceback() {}

◆ ~Exception()

Exception::~Exception ( void )
virtualnoexcept

Definition at line 47 of file Exception.cc.

47{}

Member Function Documentation

◆ addMessage()

void Exception::addMessage ( char const * file,
int line,
char const * func,
std::string const & message )

Add a tracepoint and a message to an exception before rethrowing it (access via LSST_EXCEPT_ADD).

Parameters
[in]fileFilename (automatically passed in by macro).
[in]lineLine number (automatically passed in by macro).
[in]funcFunction name (automatically passed in by macro).
[in]messageAdditional message to associate with this rethrow.

Definition at line 49 of file Exception.cc.

49 {
50 std::ostringstream stream;
51 stream << _message;
52 if (_traceback.empty()) {
53 // This means the message-only constructor was used, which should only happen
54 // from Python...but this method isn't accessible from Python, so maybe
55 // this Exception was thrown in Python, then passed back to C++. Or, more
56 // likely, someone didn't read the warning and threw this exception in C++
57 // without using LSST_EXCEPT.
58 // But, because we don't have a traceback for that first message, we can't
59 // add one here without messing up the stringification logic later. Since
60 // this is a rare case (and should be considered a bug, but we don't want
61 // exception code throwing its own exceptions unless it absolutely has to),
62 // we'll proceed by just appending the message and ignoring the traceback.
63 stream << "; " << message;
64 } else {
65 if (_traceback.size() == static_cast<std::size_t>(1)) {
66 // The original message doesn't have an index (because it's faster,
67 // and there's no need if there's only one), so when we add the second,
68 // we have to give it an index.
69 stream << " {0}; ";
70 } else {
71 stream << "; ";
72 }
73 stream << message << " {" << _traceback.size() << "}";
74 _traceback.push_back(Tracepoint(file, line, func, message));
75 }
76 _message = stream.str();
77}
T empty(T... args)
T push_back(T... args)
T size(T... args)
T str(T... args)

◆ addToStream()

std::ostream & Exception::addToStream ( std::ostream & stream) const
virtual

Add a text representation of this exception, including its traceback with messages, to a stream.

Parameters
[in]streamReference to an output stream.
Returns
Reference to the output stream after adding the text.

Definition at line 81 of file Exception.cc.

81 {
82 if (_traceback.empty()) {
83 // The exception was raised in Python, so we don't include the traceback, the type, or any
84 // newlines, because Python will print those itself.
85 stream << _message;
86 } else {
87 stream << std::endl; // Start with a newline to separate our stuff from Pythons "<type>: " prefix.
88 for (std::size_t i = 0; i != _traceback.size(); ++i) {
89 stream << " File \"" << _traceback[i]._file << "\", line " << _traceback[i]._line << ", in "
90 << _traceback[i]._func << std::endl;
91 stream << " " << _traceback[i]._message << " {" << i << "}" << std::endl;
92 }
94 stream << type << ": '" << _message << "'" << std::endl;
95 }
96 return stream;
97}
table::Key< int > type
Definition Detector.cc:163
virtual char const * getType(void) const noexcept
Return the fully-specified C++ type of a pointer to the exception.
Definition Exception.cc:101
T endl(T... args)
T strlen(T... args)

◆ clone()

Exception * Exception::clone ( void ) const
virtual

Return a copy of the exception as an Exception pointer.

Can be overridden by derived classes that add data or methods.

Returns
Pointer to a copy of the exception.

Reimplemented in lsst::meas::base::MeasurementError.

Definition at line 103 of file Exception.cc.

103{ return new Exception(*this); }
Exception(char const *file, int line, char const *func, std::string const &message)
Standard constructor, intended for C++ use via the LSST_EXCEPT() macro.
Definition Exception.cc:42

◆ getTraceback()

Traceback const & Exception::getTraceback ( void ) const
noexcept

Retrieve the list of tracepoints associated with an exception.

Definition at line 79 of file Exception.cc.

79{ return _traceback; }

◆ getType()

char const * Exception::getType ( void ) const
virtualnoexcept

Return the fully-specified C++ type of a pointer to the exception.

This is overridden by derived classes (automatically if the LSST_EXCEPTION_TYPE macro is used). It is used by the Python interface.

Returns
String with the C++ type; does not need to be freed/deleted.

Reimplemented in lsst::meas::base::MeasurementError.

Definition at line 101 of file Exception.cc.

101{ return "lsst::pex::exceptions::Exception *"; }

◆ what()

char const * Exception::what ( void ) const
virtualnoexcept

Return a character string summarizing this exception.

This combines all the messages added to the exception, but not the type or traceback (use the stream operator to get this more detailed information).

Not allowed to throw any exceptions.

Returns
String representation; does not need to be freed/deleted.

Definition at line 99 of file Exception.cc.

99{ return _message.c_str(); }
T c_str(T... args)

The documentation for this class was generated from the following files: