Python元组比较报错疑问:为何两组相似比较结果不同?
为什么Python元组比较会出现类型错误?
这是因为Python里的元组比较是逐元素依次对比的,规则很直白:
- 从第一个元素开始比较,只要找到一对不相等的元素,就用这对元素的比较结果作为整个元组的比较结果,后面的元素直接忽略。
- 如果前面的元素都相等,才会继续比较下一个元素,直到所有元素都比完(此时元组相等)或者遇到无法比较的元素类型。
咱们拆解你给出的两个例子:
第一个比较:('abc', 1, 2) > ('aaa', 777, 'ssst..')
对比第一个元素:'abc' 和 'aaa'。字符串比较是按字符的ASCII值来的,'b'的ASCII码比'a'大,所以'abc' > 'aaa'的结果是True。这时候Python直接返回整个元组比较的结果为True,根本不会去看后面的1 vs 777或者2 vs 'ssst..',自然不会报错。
第二个比较:('abc', 1, 2) > ('abc', 1, 'ssst..')
前两个元素完全相等:'abc' == 'abc',1 == 1。这时候必须继续比较第三个元素:2(整数类型)和'ssst..'(字符串类型)。Python默认不支持不同类型的基础数据直接用>这类运算符比较,所以就抛出了TypeError: '>' not supported between instances of 'int' and 'str'。
简单说就是:第一个例子在前面的元素就分出了胜负,没触发类型不兼容的比较;第二个例子前面元素都一样,不得不比较类型不同的元素,就报错了。
内容的提问来源于stack exchange,提问作者Constantin Ionescu
相关产品推荐
相关产品推荐

