Ctypes catching exception

Question:

I’m playing a little bit with ctypes and C/C++ DLLs
I have a quite simple “math” dll

double Divide(double a, double b)
{
    if (b == 0)
    {
       throw new invalid_argument("b cannot be zero!");
    }

    return a / b;
}

It works so far
the only problem, i get a WindowsError Exception in Python and I cannot retrieve the text
b cannot be zero
Is there some special exception type I must throw? Or must the Python code be altered?
python code:

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"
Asked By: nobs

||

Answers:

Try this:

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"
Answered By: luke14free

Going through the ctypes documentation for Python 2.7.3 I can’t see any reference to C++ and throwing exceptions from C++ code called via ctypes. It seems ctypes was meant for calling C functions only and does not handle C++ exceptions.

Answered By: piokuc
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.