ArgumentError: Python argument types in ****** did not match C++ signature:

在使用RDKit库的MolToMolFile函数时,遇到了ArgumentError,原因是传递给filename参数的值应为字符串而非整型。通过检查代码发现,我错误地将整形值赋给了filename,导致了C++签名不匹配的问题。解决方法是确保filename变量为字符串类型,从而避免这种类型错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这种错误一般是由于数据类型错误(我是这样的)

ArgumentError Traceback (most recent call last)
/tmp/ipykernel_2665/3113553009.py in
26
27 filename = conf[“geom_id”]
—> 28 Chem.MolToMolFile(mol=mol, filename= filename)

ArgumentError: Python argument types in
rdkit.Chem.rdmolfiles.MolToMolFile()
did not match C++ signature:
MolToMolFile(RDKit::ROMol mol, std::__cxx11::basic_string<char, std::char_traits, std::allocator > filename, bool includeStereo=True, int confId=-1, bool kekulize=True, bool forceV3000=False)

上面 filename 应该给的是字符串类型,我给的是整形,所以包这样的错误

`Boost.Python.ArgumentError: Python argument types in` 错误通常出现在使用 C++Python 的结合库 Boost.Python 进行跨语言调用时。它表示传递给某个函数的参数类型不符合预期。 ### 解决步骤 1. **检查函数签名** 确保从 Python 调用 C++ 函数时,所传入的参数数量和类型都匹配 C++ 中定义的函数签名。如果 C++ 函数需要特定类型的参数,则 Python 应提供兼容的数据结构。 2. **数据转换问题** 如果涉及到复杂的数据类型(例如自定义类、容器等),确保已在 Boost.Python 中正确注册了这些类型,并实现了必要的隐式或显式的类型转换机制。 3. **调试信息分析** 查看完整的错误堆栈信息,定位具体出错的位置以及涉及哪些参数导致了不匹配的情况。 4. **示例代码验证** 创建简单的测试用例重现该问题并逐步排查是否因为某些特殊的输入引起异常。 5. **文档参考** 参考官方 [Boost.Python](https://www.boost.org/doc/libs/release/libs/python/) 文档了解关于如何处理常见错误及最佳实践建议的信息资源链接。 --- #### 示例修正流程: 假设我们有这样一个场景,在 C++ 文件中有如下导出方法: ```cpp void print_int(int x){ std::cout << "Integer value is:" << x; } BOOST_PYTHON_MODULE(mymodule) { def("print_int", &print_int); } ``` 而你在 python端如此尝试调用了却报错了上述提到的那个Argument Error : ```python import mymodule as mp mp.print_int('abc') #这里应该是一个整数而不是字符串字符序列形式 ``` 正确的做法应该是将 'abc' 改成真正的integer型数值比如 `789`, 即改为下面这样才不会触发argument mismatch error. ```python mp.print_int(789) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值