擅长:python、mysql、java
<P>微不足道的方法是确保所有要在Python中捕获的C++异常也是绑定的一部分。<p>
<p>因此,在您的模块中,假设您有一个名为<code>CppExp</code>的cpp异常类型,您可以执行以下操作</p>
<pre><code>namespace py=pybind11;
PYBIND11_MODULE(test, m)
{
py::register_exception<CppExp>(module, "PyExp");
}
</code></pre>
<p>这将创建一个名为<code>PyExp</code>的新python异常,并将导致抛出<code>CppExp</code>的任何代码将其重新映射到python异常中</p>
<p>然后在python代码中可以执行以下操作</p>
<pre><code>import test
while True:
try:
test.test1.fn(...)
except test.PyExp as ex:
print("exception error.", ex)
</code></pre>
<p>关于异常处理的其他pybind11文档如下:
<a href="https://pybind11.readthedocs.io/en/master/advanced/exceptions.html" rel="noreferrer">https://pybind11.readthedocs.io/en/master/advanced/exceptions.html</a></p>
<如果你的C++异常有你想翻译成Python的自定义字段或方法,你必须根据我的答案实际修改pybDun11代码:
<a href="https://stackoverflow.com/questions/62087383/how-can-you-bind-exceptions-with-custom-fields-and-constructors-in-pybind11-and/62087976#62087976">How can you bind exceptions with custom fields and constructors in pybind11 and still have them function as python exception?</a></p>