我有两个元组比较。几乎相同的数据。为什么会出现此错误:

2024-06-16 17:41:01 发布

您现在位置:Python中文网/ 问答频道 /正文

print( ('abc', 1, 2) > ('aaa', 777, 'ssst..') )

print( ('abc', 1, 2) > ('abc', 1, 'ssst..') )

结果:

True

Traceback (most recent call last):
  File "//frserv-bu.playtika.local/users$/constantinio/Documents/Python_course/Sedinta3/ex.py", line 33, in <module>
    print( ('abc', 1, 2) > ('abc', 1, 'ssst..') )
TypeError: '>' not supported between instances of 'int' and 'str'

Process finished with exit code 1

Tags: truemostlocalcallfilelastabcprint
3条回答

在第一种情况下,'abc''aaa'之间的比较已经给出了一个结果('abc'在词典上比'aaa'大),因此不执行其余的比较(比较是“短路的”)

在第二种情况下,由于所有先前的元素都相等,因此将执行到最后一个元素的比较。2'ssst...'之间的比较失败,出现了一个异常,因为前者的类型为int,后者的类型为str

第一次比较是将'abc''aaa'进行比较,然后它知道结果是什么,不必继续到其他元素

在第二次比较中,元组对于前两个元素具有相同的值,因此它必须检查第三个元素,在这一点上,它尝试将2'ssst..'进行比较,这会导致您看到的错误

元组的比较从左开始逐元素进行,直到可以比较不相等的值为止。就是

(a, b, c) > (x, y, z)

相当于(带有一些多余的括号)

(a > x) if (a != x) else ((b > y) if (b != y) else (c > z))

或者以声明的形式

# result = (a, b, c) > (x, y, z)
if a != x:
    result = a > x
elif b != y:
    result = b > y
else:
    result = c > z

在您的示例中,比较a > xb > y有效,但c > z无效,因为只能对相同类型的值进行排序。因为只有在必要时才会进行比较,所以只有在a == xb == y时才会出现错误

相关问题 更多 >