Correctly report Python exceptions set but not thrown during import. #1734
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Consider the following example:
Currently, importing this module will result in
because the Python exception is not converted to a C++ one
(py::error_already_set). Fix that by checking the error flag, so that
one instead gets
Real use cases include numpy's
import_array()
or pycairo'simport_cairo()
, which can set the exception flag (and return -1) onfailure. Currently the correct way to handle them with pycairo is
and this patch removes the need for
m.ptr() = nullptr;
.No tests for now for the same reason as in #1362 (I think any proper unit test would require creating a new module just for that purpose, and I'm not particularly familiar with the testing machinery used by pybind, so guidance would be welcome here. But "it works for me"...).