python-3.x 如何解决调用“SMILES传递错误”的错误

qeeaahzv  于 2023-05-02  发布在  Python
关注(0)|答案(1)|浏览(386)

当我运行python脚本时,它显示问题“SMILES Pass Error”imageimage2image3。代码如下所示。

def convert_vocab_to_smiles_fn(smi_vocab_coding_padded,
                               token_EOS=SmilesVocab.smi_vocab.index('<EOS>')):
  index_eos = np.where(smi_vocab_coding_padded == token_EOS)[0]
  f_counter = 0
  if index_eos.size == 0:
    f_counter += 1
    return None, ''.join(
      [SmilesVocab.smi_vocab[x] for x in smi_vocab_coding_padded])
  elif index_eos[0] == 0:
    f_counter += 1
    return False, ''.join(
      [SmilesVocab.smi_vocab[x] for x in smi_vocab_coding_padded])
  else:
    int_encoding = smi_vocab_coding_padded[:index_eos[0]]
    smiles_encoding = ''.join(
      [SmilesVocab.smi_vocab[x] for x in int_encoding])

    try:
      rdkit_mol_encoding = rdkit_chem.MolFromSmiles(smiles_encoding)
    except:
      rdkit_mol_encoding = None
  return smiles_encoding, rdkit_mol_encoding

我在互联网上搜索解决方案,但一无所获

s8vozzvw

s8vozzvw1#

我不明白你是如何构建smiles_encoding的,但它会给你一个灿烂的笑容。
这里有一个例子,只有第一个微笑是正确的。

from rdkit import Chem

s = ['c1ccccc1', '-c1ccccc1c', 'c1c(cccc1', 'c1cccc']

mol = []

for smiles_encoding in s:
    try:
        rdkit_mol_encoding = Chem.MolFromSmiles(smiles_encoding)
        mol.append(rdkit_mol_encoding)
    except:
        rdkit_mol_encoding = None

print(mol)

输出:

[<rdkit.Chem.rdchem.Mol object at 0x00000175DDA89F20>, None, None, None]

[22:43:58] SMILES Parse Error: syntax error while parsing: -c1ccccc1c
[22:43:58] SMILES Parse Error: Failed parsing SMILES '-c1ccccc1c' for input: '-c1ccccc1c'
[22:43:58] SMILES Parse Error: extra open parentheses for input: 'c1c(cccc1'
[22:43:58] SMILES Parse Error: unclosed ring for input: 'c1cccc'

要么你的微笑不是很好,要么你正在使用损坏的微笑。

相关问题