RDKit中Mol.GetSubstructMatches参数类型不匹配问题求助
问题解决:RDKit GetSubstructMatches 参数不匹配错误
错误原因
你的代码存在两个核心问题:
- 直接将SMARTS字符串
"[CX4]"传入GetSubstructMatches,但该方法要求参数为RDKit的ROMol查询对象,而非原始字符串。 - 错误信息显示实际调用时多传了一个
m参数(m.GetSubstructMatches(m,"[CX4]")),直接导致参数数量、类型与方法定义不匹配。
修正后的代码
from rdkit import Chem from rdkit.Chem import Draw, Descriptors, rdqueries m = Chem.MolFromSmiles("CCCCCC") # 将SMARTS字符串转换为RDKit可识别的查询分子对象 query = Chem.MolFromSmarts("[CX4]") # 仅传入查询分子即可调用方法 print(m.GetSubstructMatches(query))
修正说明
- SMARTS转Mol对象:使用
Chem.MolFromSmarts()把SMARTS查询字符串转换成RDKit标准的ROMol实例,这是RDKit子结构匹配的必要前置步骤。 - 修正参数传递:
GetSubstructMatches是目标分子m的实例方法,方法内部已通过self引用了m,因此只需传入查询分子,无需重复传递目标分子。
运行修正后的代码,会输出((0,), (1,), (2,), (3,), (4,), (5,)),对应己烷中所有6个sp3杂化碳原子的位置索引,符合预期。
内容的提问来源于stack exchange,提问作者Bigfoot Mountain
相关产品推荐
相关产品推荐

