2016-11-30 35 views
1

我有一個函數在這裏寫:爲什麼我在這個Python代碼上得到斷言錯誤?

def addItem(aBookcase, name, mediaType): 
    """ 
    Returns False if aBookcase is full, otherwise returns True and 
    adds item of given name and mediaType to aBookcase. 
    """ 
    pass 
    emptySpacesBefore = aBookcase.getEmptySpaces() 
    if aBookcase.getEmptySpaces() == 0: 
     added = False 
     return added 
    else: 
     position = findSpace(aBookcase) 
     aBookcase.setName(*position, name=name) 
     aBookcase.setType(*position, mediaType=mediaType) 
     added = True 
     emptySpacesAfter = aBookcase.getEmptySpaces() 
    assert added is True, "No free positions" 
    assert emptySpacesAfter < emptySpacesBefore, "Same amount of empty spaces" 
    assert aBookcase.getName(*position) is name, "Error with name" 
    assert aBookcase.getType(*position) is mediaType, "Error with media type" 

然而,當我去與這行代碼來測試功能:

assert addItem(small, "Algorhythms, date structures and compatibility", BOOK) 

我得到一個「Asse田」,如下所示:

Screenshot of 'AssertionError'

所以,如果我是正確的,這意味着我沒有處理它,但我不知道如何或爲什麼?我的代碼有問題嗎?有什麼遺漏?

+0

你可以把問題的斷言錯誤的文字?有些人(比如我自己)在阻止imgur的網絡上。 –

+0

@AndrewLamarra:幫助盲人:左上角(剛剛注意到它):'ity',BOOK)',然後「斷言這個代碼未處理」 –

回答

1

當它正常工作時,您的addItem函數不會返回任何內容,因此它返回None,這被看作是您插入的最後一條assert語句的失敗。您應該返回added這兩種情況下(TrueFalse

順便說一句,因爲你達到這條線,這意味着所有以前的聲明是確定這樣一個好消息:你的代碼是OK。

+0

非常感謝你,只要忘記'返回添加'聲明哈哈,現在可能在角落裏戴着那頂笨拙的帽子:D。 – Gazza732

+0

我剛剛注意到需要'return'。發佈編輯。請確保在那個角落至少停留10分鐘:) –

+0

我覺得現在更加愚蠢的是,我確實在第一個位置的else子句中實際上有'返回添加'語句,但是當我把第一個'assert'行放在第一位時,意外地刪除了它。不知道我爲什麼/怎麼做,認爲我必須突出顯示。再次感謝 – Gazza732

相關問題