py4cl2-cffi
py4cl2-cffi copied to clipboard
Raise Python exceptions as Lisp (pyerror) errors and guard numpy import
The big change with this pull request is to raise a Lisp pyerror
when a Python error is raised. It does this by wrapping all evaluated code in a try catch that looks something like:
try:
_ = <inserted code>
except Exception as e:
_ = ExecutionFailure(e)
Both the stack trace and the error are retained and available in the (modified) pyerror
. Example:
(handler-case
(raw-pyexec "raise ValueError('Some error')")
(pyerror (e)
(format t "Caught: <~a>~%Message: <~a>~%Exception class: <~a>~%"
e
(slot-value e 'py4cl2-cffi::exception-message)
(slot-value e 'py4cl2-cffi::exception-type))))
produces:
Caught: <Python raised an exception:
Traceback (most recent call last):
File "<string>", line 3, in <module>
ValueError: Some error
>
Message: <Some error>
Exception class: <ValueError>
For some unknown reason, I was not able to merge in the changes you made last night so I recreated my fork for this pull request (in case you were wondering or if there's any other git weirdness).