gpt4 book ai didi

python - Ctypes 捕获异常

转载 作者:太空狗 更新时间:2023-10-29 23:08:18 26 4
gpt4 key购买 nike

我正在尝试使用 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"

最佳答案

首先,您不应该在 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++ 异常。

关于python - Ctypes 捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10175753/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com