Modeller 9.14 "ValueError: Too many values to unpack"
Modeller 9.14 "ValueError: Too many values to unpack"
我正在使用一种名为 "Modeller" 的蛋白质结构建模工具,该工具基于 Python,但我一直收到此错误
ValueError: too many values to unpack
当我尝试 运行 以下脚本时:
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
有人可以帮忙吗?
错误必须在这一行:
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')]:
我赞成上一个答案,但作为替代方案,您可能想添加一个逗号以使元组工作,如果这是您希望代码执行的操作:
for (pdb, chain) in (('tseq1', 'A'),):
print pdb, chain
产生:
tseq1 A
试试这个。
inv_type = (('tseq1', 'A'))
pdb, chain = inv_type if isinstance(inv_type, tuple) else [inv_type]
print pdb, chain
我正在使用一种名为 "Modeller" 的蛋白质结构建模工具,该工具基于 Python,但我一直收到此错误
ValueError: too many values to unpack
当我尝试 运行 以下脚本时:
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
有人可以帮忙吗?
错误必须在这一行:
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')]:
我赞成上一个答案,但作为替代方案,您可能想添加一个逗号以使元组工作,如果这是您希望代码执行的操作:
for (pdb, chain) in (('tseq1', 'A'),):
print pdb, chain
产生:
tseq1 A
试试这个。
inv_type = (('tseq1', 'A'))
pdb, chain = inv_type if isinstance(inv_type, tuple) else [inv_type]
print pdb, chain