如何使用assert语句验证两个值只是为了忽略类型?我想跟随返回True
s = 3
t = '3'
assert s == t
答案 0 :(得分:1)
您可以将两者转换为相同的类型并进行比较;即。
assert str(s) == str(t)
答案 1 :(得分:1)
通常,除非类型的__eq__
方法为您处理类型转换,否则不同类型的值不会相等。 str.__eq__
和int.__eq__
都不这样做,因此'3' == 3
和3 == '3'
都会评估为False。你必须转换一个或另一个参数才能使你的断言工作,并且转换必须保留你想到的任何平等感。
assert str(s) == t
assert s == int(t)
具有正确编写的__eq__
方法的类型可以为您处理此问题。想象一下这样一个名为IntorStr
的类;然后所有以下内容都会通过:
for x,y in itertools.product([3, '3'], repeat=2):
assert IntOrStr(x) == y
assert x == IntOrStr(y)
assert IntOrStr(x) == IntOrStr(y)
IntOrStr
可能看起来像
class IntOrStr:
def __init__(self, v):
self.v = v
self.type = type(v)
def __eq__(self, other):
if self.v == other:
return True
try:
v = self.type(other)
else:
if self.v == v:
return True
try:
v = other.v
else:
return self.v == v or self.v == self.type(v)
return False