我正在使用一种名为“Modeller”的蛋白质结构建模工具,该工具基于Python而且我一直收到此错误
ValueError:要解压缩的值太多
当我尝试运行以下脚本时:
from modeller import *
env = environ()
aln = alignment(env)
for (pdb, chain) in (('tseq1', 'A')):
m = model(env, file=pdb, model_segment=('FIRST:'+chain, 'LAST:'+chain))
aln.append_model(m, atom_files=pdb, align_codes=pdb+chain)
aln.malign()
aln.malign3d()
aln.compare_structures()
aln.id_table(matrix_file='family.mat')
env.dendrogram(matrix_file='family.mat', cluster_cut=-1.0)
我已经尝试更改'tseq1'(模板序列),以防万一我得到了错误的文件,它应该是qseq1,这是我的查询序列。但它没有什么区别,我一直得到同样的错误。我在某处读到这样的错误,当我尝试将太多的值解压缩到一个没有足够的变量来解压缩它们的对象时,但我无法看到这个脚本中'tseq1'的位置。 当我在终端中运行此代码时,我使用以下命令(以防万一与它有关,我怀疑):
mod9.14 script2.py
有人可以帮忙吗?
答案 0 :(得分:2)
错误必须在此行中:
for (pdb, chain) in (('tseq1', 'A')):
您正尝试将tseq1
解包为两个变量pdb
和chain
。由于Python字符串是可迭代的,所以会发生pdb
得到't'
和chain
's',但是解释器不知道在哪里解包序列的其余部分(因此too many values to unpack
)。
令你感到困惑的是,(('tseq1', 'A'))
与('tseq1', 'A')
几乎相同,即它不是一个元组序列,它只是一个2元素元组。
如果将外括号更改为方括号,则将元组转换为仅包含一个元组的列表,并且代码不应失败。 (或者你可以在元组之后添加一个逗号来创建一个元组(('tseq1', 'A'), )
的元组)。但是,我不知道这是否是你期望它做的:
for (pdb, chain) in [('tseq1', 'A')]:
顺便说一下,拆包的支架不是必需的。这是一样的:
for pdb, chain in [('tseq1', 'A')]:
答案 1 :(得分:0)
我赞成了流行的答案,但作为替代方案,您可能需要添加一个逗号来使元组工作,如果这是您希望代码执行的操作:
for (pdb, chain) in (('tseq1', 'A'),):
print pdb, chain
产生
tseq1 A
答案 2 :(得分:0)
尝试这个。
inv_type = (('tseq1', 'A'))
pdb, chain = inv_type if isinstance(inv_type, tuple) else [inv_type]
print pdb, chain