我的情况如下:我有一个库,它使用CustomlibraryException来处理所有异常.我想要的是基本上得到错误消息并用它引发 Python错误.
user guide有一些提示,但它有点不明确.
第一种可能性是:
cdef int bar()除了ValueError
这会将CustomlibraryException转换为ValueError,但会丢失错误消息.
另一种可能性是使用明确转换错误
cdef int raise_py_error()cdef int something_dangerous() except +raise_py_error
我真的不明白这个解决方案.我知道raise_py_error必须是一个以某种方式处理错误的C函数.我不知道如何处理它.该函数不获取参数,并在C中的catch块内调用.
如果任何人有一个在Cython中处理C异常的工作示例,那将会有很大的帮助.
解决方法 如果CustomlibraryException派生自std :: runtime_error(作为一个表现良好的C异常应该),那么你看到的行为是Cython中的一个错误.如果没有,那么最简单的方法是将C函数包装在一个转换异常的C帮助函数中:
double foo(char const *,Bla const &); // this is the one we're wrapPingdouble foo_that_throws_runtime_error(char const *str,Bla const &blaref){ try { return foo(str,blaref); } catch (CustomlibraryException const &e) { throw std::runtime_error(e.get_the_message()); }}
这将导致在Python端引发RuntimeError.或者,抛出一个std :: invalID_argument来引发ValueError等(参见你链接到的页面中的表).
总结以上是内存溢出为你收集整理的在Cython中处理自定义C异常全部内容,希望文章能够帮你解决在Cython中处理自定义C异常所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)