2016-11-30 108 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