2012-12-18 44 views
1

我甚至不知道什麼是我的問題是從這個錯誤。任何信息都會非常有幫助。錯誤超過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「equa ([''OH','CO2','c3o3','H2O3','CO','C3H1'',unel)「,SAGE_TMP_DIR) File 「」,第1行,在

文件「/sagenb/sage_install/sage-5.4-sage.math.washington.edu-x86_64-Linux/devel/sagenb-git/sagenb/misc/support.py」,行479,in 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/站點包/鼠尾草/雜項/ 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在片: c.append(X [0])

return list(set(c)) 

DEF extracting_columns(硬幣,元素): species_vector =零(LEN(元素))在硬幣 爲(EL,MUL): species_vector [elements.index(EL)] = MUL

return species_vector 
+0

請修復格式,以便我們可以複製並粘貼此文件並嘗試使用 - 或者至少閱讀它。 – abarnert

回答

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) 

這樣做沒有任何例外。無論你真正想要什麼,我都不知道。

無論如何,學習如何查看代碼中實際發生的情況並調試微不足道的問題,可能比立即獲得正確答案更重要。

+0

+1,很好的解釋(很高興看到其他人使用雙空間縮進:))。 – RocketDonkey

+0

@RocketDonkey:非常感謝編寫「python-mode.el」的雙空間縮進自動檢測代碼的人;這只是它出於某種原因而對OP的代碼做了什麼的最佳猜測。就我個人而言,當我在SO這樣的地方發帖時,有時會使用兩個空格,人們甚至可能無法閱讀76列,但我試圖堅持四維空間來發布和維護代碼(遵循PEP 8)。 – abarnert

+0

有意義,爲了更好的可讀性,這裏介紹兩個間距的好處。我發現我總是在這裏爲PEP 8 /公衆批准合規性在這裏做四個空間,但是我開始學習Python,遵循Google風格指南,並且還沒有踢過雙空間習慣(儘管我[顯然]沒有專業編碼,所以我唯一感到困擾的就是我)。無論如何,一如既往的好回答:) – RocketDonkey

相關問題