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, in

ファイル "/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, globals) ファイル ""、行 1、内

ファイル ""、4 行目、方程式内

ファイル ""、3 行目、extracting_columns 内

ValueError: アンパックするには複数の値が必要です

必要に応じて、以前の関数をインポートします。

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=[]: piece=parse_formula(element) ピース内の x: c.append(x[0])

return list(set(c))

def extracting_columns(種、要素): 種_ベクトル=zeros(len(要素)) 種の(エル、ムル): 種_ベクトル[要素.インデックス(エル)]=ムル

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'ますか?さて、それが呼び出される場所を見てみましょう。さらにいくつか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)

これは、例外なく何かを行います。それがあなたが本当に望んでいるものかどうか、私にはわかりません。

いずれにせよ、ここで正しい答えをすぐに得るよりも、コードで実際に何が起こっているかを確認し、些細な問題をデバッグする方法を学ぶことの方がおそらく重要です。

于 2012-12-18T01:14:15.853 に答える