加入收藏 | 设为首页 | 会员中心 | 我要投稿 大庆站长网 (https://www.0459zz.com/)- 科技、智能边缘云、事件网格、云计算、站长网!
当前位置: 首页 > 编程开发 > Python > 正文

如何在python中捕获异常(在C中引起)

发布时间:2020-09-19 08:09:04 所属栏目:Python 来源:互联网
导读:我想在我的C应用程序中嵌入python.我不使用Boost库.如果C函数抛出异常,我想捕获它并在我的应用程序中打印错误或获取一些详细信息,如python脚本中的行号导致错误.我该怎么做?我找不到任何函数来获取Python API或C中的详细异常信息.void sum(int iA, int iB) {

我想在我的C应用程序中嵌入python.我不使用Boost库.

如果C函数抛出异常,我想捕获它并在我的应用程序中打印错误或获取一些详细信息,如python脚本中的行号导致错误.

我该怎么做?我找不到任何函数来获取Python API或C中的详细异常信息.

void sum(int iA,int iB)
{
    throw iA + iB;
}

from ctypes import * 

mydll = WinDLL("C:Userscppwrapper.dll")

try:
    mydll.sum(2,3)
catch:
    print "exception occured"

但它不起作用.请帮我解决这个问题.提前致谢. 最佳答案 你需要做的是捕获C函数中的异常,然后将其转换为python异常并将其返回到python代码(有关详细信息,请参阅the manual).就像是:

PyObject method(...)
{
     try {
          res = do_stuff();
          return res;
     }
     catch(SomeException e)
     {
          PyErr_SetObject(exception_type,message);
          return NULL;
     }
     catch(...)
     {
          PyErr_SetObject(PyErr_SystemError,"Unexpected exception in C++");
          return NULL;
     }
}

如果在返回python之前没有捕获异常,异常可能会通过python解释器掉落,并且可能会退出调用python解释器的C函数.这可能是处理异常的一种坏方法,因为python解释器无法进行清理.省略号捕获只是为了确保不会发生这种情况.

(编辑:大庆站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读