python - 解压时出现超过 1 个值的错误

标签 python

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

到目前为止我所拥有的:

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 行,位于 execcompile(u'print support.syseval(python, u"equations([\'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 中 返回 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, 全局变量) 文件“”,第 1 行,位于

文件“”,第 4 行,方程

文件“”,第 3 行,extracting_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(组): c=[] 对于组中的元素: 片=parse_formula(元素) 对于 x block : c.append(x[0])

return list(set(c))

def extracting_columns(物种,元素): 物种向量=零(len(元素)) 对于 (el,mul) 实物: species_vector[elements.index(el)]=mul

return species_vector

最佳答案

问题是您使用 'OH' 这样的字符串作为第一个参数来调用 extracting_columns ,因此当您尝试执行 for (el ,mul) 实物: 它试图将 '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:

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)]。所以大概问题是你忘记在某个地方调用它。也许您希望方程看起来像这样?

def equations(specie, elements):
  vectors=[]
  for x in specie:
    formula = parse_formula(x)
    vector=extracting_columns(formula, elements)
    vectors.append(vector)

这会做一些事情,没有任何异常(exception)。这是否是你真正想要的,我不知道。

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

关于python - 解压时出现超过 1 个值的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13924778/

相关文章:

python - 如何正确测试Django UpdateView?

python - 输出文件中的垃圾字符(引号等)

python - 如何向 Sentry 报告当前登录的用户?

python - 从Python中的元组列表创建vtkPolyData对象

python - 从元组生成字符串

python - 手动渲染 Django Formset

python - pickle Cython 修饰函数导致 PicklingError

python - 使用 Python 减少对列表

python - 为什么一些简短形式的条件语句在 python 中起作用而有些则不起作用?

python - 如何在 setup.cfg 中设置入口点