Python 如何使用assert忽略类型而只比较值
如何使用assert语句来验证两个变量的值仅忽略类型?我想下面返回真的Python 如何使用assert忽略类型而只比较值,python,pytest,Python,Pytest,如何使用assert语句来验证两个变量的值仅忽略类型?我想下面返回真的 s = 3 t = '3' assert s == t 您可以将两者转换为同一类型并进行比较;i、 e assert str(s) == str(t) 通常,不同类型的值不会进行相等的比较,除非类型的\uuuuu eq\uuu方法为您处理类型转换。str.\uuuuu eq\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
s = 3
t = '3'
assert s == t
您可以将两者转换为同一类型并进行比较;i、 e
assert str(s) == str(t)
通常,不同类型的值不会进行相等的比较,除非类型的
\uuuuu eq\uuu
方法为您处理类型转换。str.\uuuuu eq\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。您必须转换一个或另一个参数,以便进行断言工作,并且转换必须保留您心目中的任何平等感
assert str(s) == t
assert s == int(t)
使用正确编写的\uuuuu eq\uuu
方法的类型可以为您处理此问题。想象一下这样一个名为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
3和“3”不具有相同的值,因为它们在内存中存储为相同的位序列,即使忽略与类型表示有关的任何位。如果这不是你所说的“值”,你应该澄清你的意思。不必详细讨论位和内存存储,你的s
和t
实际上没有“相同的值”——一个是整数3,另一个是字符“3”。类型实际上是对象值的一部分。在这种情况下,您当然可以将一个或另一个转换为匹配类型,但这不能作为通用解决方案工作,并且没有可能的通用解决方案。不幸的是,这是您将要找到的最接近通用解决方案的东西float
是一个必须单独处理的变量。@brunodesshuilliers:f1不等同于f2,str(f1)不等同于str(f2);你认为这是个问题吗?@ StgSununter对不起,我的意思是<代码> F2=10/3 < /代码> -但是重做测试导致<代码> STR(F1)等于<代码> STR(F2)< /代码>,所以我必须确实犯了一些错误;