与python整数比较真的很尴尬(看似简单)的bug

时间:2010-07-19 13:40:36

标签: python identity equality

我有以下一段代码,它的工作方式与我期望的完全不同......

current_frame = 15 # just for showcasing purposes
g_ch = 7

if (current_frame != int(row[0])) and (int(row[1]) != g_ch):
                current_frame = int(row[0])
                print "curious================================="
                print current_frame
                print row
                print current_frame, " != ", int(row[0]), ", ", current_frame != int(row[0])
                print "========================================"

打印任何特定情况:

curious================================= 

15 

['15', '1', 'more data'] 15 != 15 , False

========================================

这显然永远不会输入if语句,因为等式显示为false。为什么会这样?

编辑:我也试过这个!=而不是'不是',并得到了相同的结果。

3 个答案:

答案 0 :(得分:6)

使用!=运算符进行值比较,而不是使用is not进行值比较,后者会比较对象标识。

除此之外,我认为这是一个缩进问题。

答案 1 :(得分:1)

简而言之,您需要使用==!=,而不是isis比较对象标识,而不是相等。

答案 2 :(得分:0)

在if中分配current_frame = int(row[0]),这会改变布尔表达式的值。