mirror of
https://github.com/pybind/pybind11.git
synced 2024-11-29 16:37:13 +00:00
Add getters for exception type, value and traceback (#1641)
This commit is contained in:
parent
9bb3313162
commit
35045eeef8
@ -1987,12 +1987,12 @@ class gil_scoped_release { };
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
error_already_set::~error_already_set() {
|
error_already_set::~error_already_set() {
|
||||||
if (type) {
|
if (m_type) {
|
||||||
error_scope scope;
|
error_scope scope;
|
||||||
gil_scoped_acquire gil;
|
gil_scoped_acquire gil;
|
||||||
type.release().dec_ref();
|
m_type.release().dec_ref();
|
||||||
value.release().dec_ref();
|
m_value.release().dec_ref();
|
||||||
trace.release().dec_ref();
|
m_trace.release().dec_ref();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -324,7 +324,7 @@ public:
|
|||||||
/// Constructs a new exception from the current Python error indicator, if any. The current
|
/// Constructs a new exception from the current Python error indicator, if any. The current
|
||||||
/// Python error indicator will be cleared.
|
/// Python error indicator will be cleared.
|
||||||
error_already_set() : std::runtime_error(detail::error_string()) {
|
error_already_set() : std::runtime_error(detail::error_string()) {
|
||||||
PyErr_Fetch(&type.ptr(), &value.ptr(), &trace.ptr());
|
PyErr_Fetch(&m_type.ptr(), &m_value.ptr(), &m_trace.ptr());
|
||||||
}
|
}
|
||||||
|
|
||||||
error_already_set(const error_already_set &) = default;
|
error_already_set(const error_already_set &) = default;
|
||||||
@ -335,7 +335,7 @@ public:
|
|||||||
/// Give the currently-held error back to Python, if any. If there is currently a Python error
|
/// Give the currently-held error back to Python, if any. If there is currently a Python error
|
||||||
/// already set it is cleared first. After this call, the current object no longer stores the
|
/// already set it is cleared first. After this call, the current object no longer stores the
|
||||||
/// error variables (but the `.what()` string is still available).
|
/// error variables (but the `.what()` string is still available).
|
||||||
void restore() { PyErr_Restore(type.release().ptr(), value.release().ptr(), trace.release().ptr()); }
|
void restore() { PyErr_Restore(m_type.release().ptr(), m_value.release().ptr(), m_trace.release().ptr()); }
|
||||||
|
|
||||||
// Does nothing; provided for backwards compatibility.
|
// Does nothing; provided for backwards compatibility.
|
||||||
PYBIND11_DEPRECATED("Use of error_already_set.clear() is deprecated")
|
PYBIND11_DEPRECATED("Use of error_already_set.clear() is deprecated")
|
||||||
@ -344,10 +344,14 @@ public:
|
|||||||
/// Check if the currently trapped error type matches the given Python exception class (or a
|
/// Check if the currently trapped error type matches the given Python exception class (or a
|
||||||
/// subclass thereof). May also be passed a tuple to search for any exception class matches in
|
/// subclass thereof). May also be passed a tuple to search for any exception class matches in
|
||||||
/// the given tuple.
|
/// the given tuple.
|
||||||
bool matches(handle ex) const { return PyErr_GivenExceptionMatches(ex.ptr(), type.ptr()); }
|
bool matches(handle ex) const { return PyErr_GivenExceptionMatches(ex.ptr(), m_type.ptr()); }
|
||||||
|
|
||||||
|
const object& type() const { return m_type; }
|
||||||
|
const object& value() const { return m_value; }
|
||||||
|
const object& trace() const { return m_trace; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
object type, value, trace;
|
object m_type, m_value, m_trace;
|
||||||
};
|
};
|
||||||
|
|
||||||
/** \defgroup python_builtins _
|
/** \defgroup python_builtins _
|
||||||
|
Loading…
Reference in New Issue
Block a user