python 如何捕获Chem.MolFromSmiles(“公式”)的错误消息

gopyfrb3  于 2023-03-11  发布在  Python
关注(0)|答案(1)|浏览(278)

我是这个RDKit的新手,下面是我用来从公式中获取化学图像的代码,

from rdkit import Chem
m = Chem.MolFromSmiles('OCC1OC(C(C(C1O)O)O)[C]1(C)(CO)CC(=O)C=C(C1CCC(=O)C)C')
m

如果代码是正确的,它会显示结构。上面的代码显示错误消息

"[15:23:55] Explicit valence for atom # 11 C, 5, is greater than permitted"

我试着添加尝试捕捉,但它没有帮助。
我需要捕获此异常/消息并将其显示给用户。
我们如何才能做到这一点?Issue Image Here

try:
   from rdkit import Chem
   m = Chem.MolFromSmiles('OCC1OC(C(C(C1O)O)O)[C]1(C)(CO)CC(=O)C=C(C1CCC(=O)C)C')
   m
except Exception as e:
   print(e)
h7appiyu

h7appiyu1#

这不是一个错误,而是一个警告。你的代码在执行该赋值时不会中断。所以没有错误要捕捉。

但是您的解决方案在于返回Chem.MolFromSmiles,如果它无法构建SMILES的mol对象,则返回None,而当它设法“正确处理SMILES”时,则返回mol对象。

当然,您可以自己引发错误!

from rdkit import Chem

m = Chem.MolFromSmiles('OCC1OC(C(C(C1O)O)O)[C]1(C)(CO)CC(=O)C=C(C1CCC(=O)C)C')

if m is None:
    print("hey user, there was an error!")

# or even raise an error:
if m is None:
    raise ValueError("Could not interpret SMILES to mol object")

我知道我的答案是缺乏。我的解决方案是不转发警告给用户。我觉得这是很难做到的。如果有一个解决方案,它可能会发现利用loggingwarnings包。我也会感兴趣,但不能管理到目前为止,我自己。

相关问题