空白AssertionError

问题描述

我经常遇到这个错误,而且我似乎不太明白为什么这个错误不断弹出。

def addnumbers(number1,number2,base):
    sum = bin(int(number1,base)+int(number2,base))
    
    print(sum)
    
    return sum 
    
assert addnumbers("100011","110011",2) == "1010110"
assert addnumbers("4013","4217",8) == "10232"
addnumbers("100011",2)

因此,我有这段代码,这是一种将字符串添加在一起并以其基本形式返回它们的简单方法,现在我首先要处理十六进制部分。所以第一条断言行。

0b1010110
---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
<ipython-input-8-1102c03eff64> in <module>
     17     return sum
     18 
---> 19 assert addnumbers("100011",2) == "1010110"
     20 assert addnumbers("4013",8) == "10232"
     21 addnumbers("100011",2)

AssertionError: 

但是,它返回一个错误一个空白断言错误,当我真的不知道如何修复第一条断言行并给我一个空白错误消息时,我不确定如何从哪里开始修复我的代码。如果有人可以为我提供任何有关断言错误为何返回空白的指导,将不胜感激!

解决方法

要显示错误文本,必须明确设置它:

assert addnumbers("100011","110011",2) == "1010110",'My custom error message'
,

不要抓住断言中的错误。 unittest模块中的所有断言均采用最终参数msg,这是断言失败时要引发的消息。如有必要,将调试放在那里。

,

bin函数将返回类似“ 0b ...”的字符串 要解决您的第一个断言,您可以这样做

assert addnumbers("100011",2) == "0b1010110"

# or 

assert addnumbers("100011",2)[2:] == "1010110"
,

问题是函数(addnumbers)的返回值是以'0b'开头的字符串,但是您正在将返回值与没有'0b'的字符串进行比较。

assert addnumbers("100011",2) == "0b1010110"

上面的代码仅显示结果,而不会发生AssertionError。