1

我什至不确定这个错误到底是什么问题。任何信息都会非常有帮助。

到目前为止我所拥有的:

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 行,在 exec compile(u'print support .syseval(python, u"equations([\'OH\', \'CO2\',\'c3o3\',\'H2O3\ ',\'CO\',\'C3H1\'], unel)", SAGE_TMP_DIR ) 文件“”,第 1 行,在

syseval 中的文件“/sagenb/sage_install/sage-5.4-sage.math.washington.edu-x86_64-Linux/devel/sageb-git/sageb/misc/support.py”,第 479 行,返回 system.eval(cmd, sage_globals, locals = sage_globals) 文件“/sageb/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 行,在 extracting_columns

ValueError:需要超过 1 个值才能解压

如果需要,我以前的函数: import re def parse_formula(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=[] for element in group: piece=parse_formula(element) for x in piece: c.append(x[0])

return list(set(c))

def extracting_columns(specie, elements): species_vector=zeros(len(elements)) for (el,mul) in specie: species_vector[elements.index(el)]=mul

return species_vector
4

1 回答 1

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'?好吧,让我们看看它在哪里被调用,还有几个prints:

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是专门为将字符串 like'OH'转换为 like 对列表而设计的[('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)

这会做一些事情,没有任何例外。是不是你真正想要的,我不知道。

无论如何,学习如何查看代码中实际发生的情况并调试琐碎的问题可能比立即在这里获得正确答案更重要。

于 2012-12-18T01:14:15.853 回答