RDKit中Chem.Descriptors模块函数调用报NameError,求排查解决
解决RDKit中Descriptors未定义的NameError问题
你的代码报错NameError: name 'Descriptors' is not defined,核心原因是**Descriptors子模块没有被正确导入到当前命名空间**——即使导入了Chem,它的子模块也不会自动加载。
下面是几种可行的修复方案:
方案1:使用完整模块路径调用函数
直接通过Chem.Descriptors的层级访问目标函数,无需额外导入子模块:
from rdkit import Chem mol = Chem.MolFromSmiles('CC') # 用完整路径调用MolWt print(Chem.Descriptors.MolWt(mol)) # 输出30.07
方案2:显式导入Descriptors子模块
如果需要多次使用Descriptors下的函数,显式导入子模块会更方便:
from rdkit import Chem # 正确导入Descriptors子模块(注意它属于rdkit.Chem下) from rdkit.Chem import Descriptors mol = Chem.MolFromSmiles('CC') print(Descriptors.MolWt(mol)) # 输出30.07
方案3:直接导入单个函数
如果只需要使用某一个Descriptors函数,可以直接导入该函数:
from rdkit import Chem from rdkit.Chem.Descriptors import MolWt mol = Chem.MolFromSmiles('CC') print(MolWt(mol)) # 输出30.07
注意点
你提到“显式导入该子模块也无法解决”,大概率是导入路径错误。比如写成from rdkit import Descriptors就会失败,因为Descriptors是rdkit.Chem的子模块,不是rdkit的直接子模块,必须按正确层级导入。
内容的提问来源于stack exchange,提问作者Stuchfield
相关产品推荐
相关产品推荐

