问题描述
我经常遇到这个错误,而且我似乎不太明白为什么这个错误不断弹出。
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。