OnnxRuntime – C++捕获OnnxRuntime中的异常
1 如何捕获OnnxRuntime中的异常
之前在写OnnxRuntime部署模型代码的时候没有写捕获异常的代码,导致推理过程出错就直接崩溃。今天查了一下,在OnnxRuntime中是有异常处理机制的,OnnxRuntime中提供了继承std::exception
的结构体Ort::Exception
,在onnxruntime_cxx_api.h
中定义如下
struct Exception : std::exception {
Exception(std::string&& string, OrtErrorCode code) : message_{std::move(string)}, code_{code} {}
OrtErrorCode GetOrtErrorCode() const { return code_; }
const char* what() const noexcept override { return message_.c_str(); }
private:
std::string message_;
OrtErrorCode code_;
};
在发生异常时会通过
#define ORT_CXX_API_THROW(string, code) \
throw Ort::Exception(string, code)
#endif
抛出异常。
所以在我们的模型部署代码中只需要通过try...catch
语句块捕捉异常即可,示例代码如下
try {
auto output_tensors = m_session.Run(
Ort::RunOptions{ nullptr },
onnx_input_names.data(),
model_input_tensors.data(),
model_input_tensors.size(),
onnx_output_names.data(),
onnx_output_names.size()
);
}
catch (Ort::Exception& e)
{
std::cout << "inference failed, error_code = " << e.GetOrtErrorCode() << ", error_message: " << e.what() << std::endl;
}
通过捕捉异常,我们可以通过异常避免程序发生崩溃,通过异常处理机制增强程序的健壮性。
本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:OnnxRuntime – C++捕获OnnxRuntime中的异常
原文链接:https://www.stubbornhuang.com/2765/
发布于:2023年08月24日 9:25:44
修改于:2023年08月24日 9:25:44
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论
52