2017-02-13 38 views
-4

我該如何解決如何解決AttributeError:'dict'對象沒有屬性'nemitx'錯誤和Keyerror?

AttributeError: 'dict' object has no attribute 'nemitx' error and Keyerror?

class TwissGaussBeam(GaussBeam): 
    '''__init__(self, twiss, N=1000, pos=np.array([0, 0, 0, 0, 0, 1]), 
    Q=1e-9, chargesign=-1, restmass=ele_mass) 
    Create a multi-particle beam with a Gaussian spread in each of the 
    6 dimensions. The statistics of the beam distribution are calculated 
    from the Twiss parameters in twiss.''' 

def __init__(self, twiss, N=100000, pos=np.array([0, 0, 0, 0, 0, 1]), 
    Q=1e-12, chargesign=-1, restmass=ele_mass): 
    P = pos[5] 
    gammasquared = ((P*1e6)**2 + restmass**2)/restmass**2 
    betagamma = np.sqrt(gammasquared - 1) 
    sig = np.zeros(6) 
    sig[0] = np.sqrt((twiss.nemitx/betagamma) * twiss.betax) 
    sig[1] = np.sqrt((twiss.nemitx/betagamma)/twiss.betax) 
    sig[2] = np.sqrt((twiss.nemity/betagamma) * twiss.betay) 
    sig[3] = np.sqrt((twiss.nemity/betagamma)/twiss.betay) 
    sig[4] = twiss.sigz 
    sig[5] = twiss.sigP 
+1

錯誤信息是由於Python不認爲特維斯對象具有nemitx成員。解決方案是解決這個問題。我真的把時間花在了谷歌的「twiss」和「twiss multi particle beam」上面,因爲你沒有告訴我們任何關於這個被傳入的小東西的東西,它幾乎不可能幫助你。請閱讀[問],並給我們足夠的信息,如[mcve],以便我們可以幫助您。 –

+0

對不起,我沒有提供足夠的信息。下次我會考慮你的觀點並感謝你的時間 – Lauren

+0

歡迎您在問題中加入必要的信息,所以問題和答案預計會反覆改進,沒有人會寫出完美的第一個問題,如果您確實發現Michael的答案是有用的,請立即投票或接受它。 –

回答

3

假設特維斯是一個字典對象,以訪問鍵的值的正確方法 - nemitx會是這樣的:

twiss['nemitx'] 

這將是對於betax,sigz和sigP也是如此。

您可以在此處詳細瞭解Python字典:

Data Structures Python - Dictionaries

+1

這是跳到了很多結論,最好等待澄清在評論或編輯問題。這個問題目前還不能回答。 – roganjosh

+0

謝謝。其實,它的工作。對Python新來說,總是困惑於如何在類中使用對象。 – Lauren

相關問題