我正在玩ctypes和C / C ++ DLL 我有一个非常简单的“数学”dll
double Divide(double a, double b)
{
if (b == 0)
{
throw new invalid_argument("b cannot be zero!");
}
return a / b;
}
它到目前为止有效 唯一的问题,我在Python中得到一个WindowsError异常,我无法检索文本 b不能为零 我必须抛出一些特殊的异常类型吗?或者必须改变Python代码? python代码:
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"
答案 0 :(得分:1)
首先,您不应该在C ++中使用异常规范。这是C ++的一个可怕特性,它已被最新标准弃用。此外,语法throw(...)
根本不是有效的C ++,这行不能使用标准的编译器编译,如gcc:
double Divide(double a, double b) throw (...)
我认为你依赖的是非标准的Visual C ++“扩展”,据我所知,无论如何都是无用的,因为Visual C ++会忽略所有异常规范,除非throw()
没有参数。
通过Python 2.7.3的ctypes文档,我看不到任何对C ++的引用,也没有从ctypes调用的C ++代码中抛出异常。似乎ctypes仅用于调用C函数,不处理C ++异常。
答案 1 :(得分:0)
试试这个:
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"