首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ctype捕获异常

Ctype捕获异常
EN

Stack Overflow用户
提问于 2012-04-16 14:11:25
回答 2查看 4.8K关注 0票数 4

我在玩ctype和C/C++ dll,我有一个非常简单的“数学”dll

代码语言:javascript
复制
double Divide(double a, double b)
{
    if (b == 0)
    {
       throw new invalid_argument("b cannot be zero!");
    }

    return a / b;
}

到目前为止,唯一的问题是,我得到了一个WindowsError异常,我无法检索文本b,不能为零,我必须抛出一些特殊的异常类型吗?还是必须修改Python代码?python代码:

代码语言:javascript
复制
from ctypes import *

mathdll=cdll.MathFuncsDll
divide = mathdll.Divide
divide.restype = c_double
divide.argtypes = [c_double, c_double]

try:
    print divide (10,0)
except WindowsError:
    print "lalal"
except:
    print "dada"
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-16 16:49:10

首先,您不应该在C++中使用异常规范。这是C++的一个可怕的特性,在最新的标准中已经被废弃了。此外,语法throw(...)根本不是有效的C++,这一行不使用像gcc这样的符合标准的编译器编译:

代码语言:javascript
复制
double Divide(double a, double b) throw (...)

我认为您依赖的是一个非标准的VisualC++“扩展”,据我所知,这是无用的,因为VisualC++忽略所有异常规范,除非throw()没有参数。

通过查看Python2.7.3的ctypes文档,我看不到对C++的任何引用,并抛出通过ctype调用的C++代码的异常。看来ctype只用于调用C函数,而不处理C++异常。

票数 1
EN

Stack Overflow用户

发布于 2012-04-16 14:15:47

试试这个:

代码语言:javascript
复制
from ctypes import *

mathdll=cdll.MathFuncsDll
divide = mathdll.Divide
divide.restype = c_double
divide.argtypes = [c_double, c_double]

try:
    print divide (10,0)
except WindowsError as we:
    print we.args[0]
except:
    print "Unhandled Exception"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10175753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档