Capture exceptions raised from PyFunctionLibrary
functions for debuggability.
#65043
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.
Capture exceptions raised from
PyFunctionLibrary
functions for debuggability.Before this change, when there is an error raised inside a
PyFunctionLibrary
method, the program would crash with a long stack trace, something like the following:The information in the raised exception is lost in this case, hindering debuggability.
This change instead returns regular value
None
back to the c++ layer to indicate error, and prints the exception chain from the python side.It prints out the exact error message one would see when an exception is raised from regular python script.
The return values of
PyFunctionLibrary
methods are all changed tostd::optional<T>
, whereT
is the successful return value andstd::nullopt
indicates error.To avoid conflict btw erroneous
None
, methods that do not essentially return a value now returns a dummyTrue
to indicate successful run.