我甚至不确定这个错误到底是什么问题。任何信息都会非常有用。
到目前为止:
def equations(specie,elements):
vectors=[]
for x in specie:
vector=extracting_columns(x,elements)
vectors.append(vector)
当我跑步时:
equations(['OH', 'CO2','c3o3','H2O3','CO','C3H1'],
['H', 'C', 'O'])
我收到以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
文件“_sage_input_77.py”,第10行,in exec编译(u'print 支持 .syseval(python,u“方程式([\'OH \',\'CO2 \',\'c3o3 \',\'H2O3 \',\' CO \',\'C3H1 \'],unel)“, SAGE_TMP_DIR )
中的文件“”,第1行文件“/sagenb/sage_install/sage-5.4-sage.math.washington.edu-x86_64-Linux/devel/sagenb-git/sagenb/misc/support.py”,第479行,在syseval中 return system.eval(cmd,sage_globals,locals = sage_globals) 文件“/sagenb/sage_install/sage-5.4-sage.math.washington.edu-x86_64-Linux/local/lib/python2.7/site-packages/sage/misc/python.py”,第56行,在eval中 eval(z,globals)
中的文件“”,第1行文件“”,第4行,方程式
文件“”,第3行,在extraction_columns
中ValueError:解包需要多于1个值
我以前的功能如果需要: 进口重新 def parse_formula(公式): '''给定一个简单的化学公式,返回一个(元素,多重性)元组列表。
Example:
'H2SO4' --> [('H', 2.0), ('S', 1.0), ('O', 4.0)]
'''
return [ (elem, float(mul) if mul else 1.) for (elem, mul) in re.findall(r'([A-Z][a-z]*)(\d*)', formula) ]
def unique_element(group): C = [] 对于组中的元素: 片= parse_formula(元件) for x in piece: c.append(X [0])
return list(set(c))
def extraction_columns(specie,elements): species_vector =零(LEN(元素)) for(el,mul)in specie: species_vector [elements.index(EL)] = MUL
return species_vector
答案 0 :(得分:2)
问题在于您使用extracting_columns
之类的字符串作为第一个参数调用'OH'
,因此当您尝试执行for (el,mul) in specie:
时,它会尝试解压缩'O'
进入(el, mul)
。
调试此方法的一种简单方法是在违规行之前插入print
:
def extracting_columns(specie, elements):
species_vector=zeros(len(elements))
print(specie)
for (el,mul) in specie:
species_vector[elements.index(el)]=mul
return species_vector
那么,extracting_columns
如何获得'OH'
?好吧,让我们看一下它的调用位置,还有几个print
s:
def equations(specie,elements):
vectors=[]
print(specie)
for x in specie:
print(x)
vector=extracting_columns(x,elements)
vectors.append(vector)
现在,当你运行它时,你会发现specie
是['OH', 'CO2', 'c3o3', 'H2O3', 'CO', 'C3H1']
,所以它的第一个元素显然是'OH'
。
关于如何解决这个问题......好吧,不知道你真正想要做什么,很难告诉你如何做到这一点。但显然如果你想迭代extracting_columns
的第一个参数并将每个项目视为一对,你必须传递一系列对而不是字符串。
但看起来您的parse_formula
专门用于将'OH'
之类的字符串转换为[('O', 1.0), ('H', 1.0)]
之类的字符串列表。所以可能问题是你只是忘了把它称之为某个地方。也许你希望equations
看起来像这样?
def equations(specie, elements):
vectors=[]
for x in specie:
formula = parse_formula(x)
vector=extracting_columns(formula, elements)
vectors.append(vector)
这样做,没有任何例外。不管它是你真正想要的,我都不知道。
无论如何,学习如何查看代码中实际发生的事情并调试琐碎的问题可能比立即获得正确答案更重要。