数字比较 - Python错误?

1 投票
2 回答
682 浏览
提问于 2025-04-15 11:36

在我的代码深处,有一个嵌套的if语句,里面又嵌套着for循环,这些都在一个类的方法里。我在比较一个特定的索引值和一个列表的长度,以确保我可以访问这个索引。代码大概是这样的:

if t.index_value < len(work_list):
    ... do stuff ...
else:
    ... print some error ...

为了说明一下,index_value 至少是零(在其他地方已经验证过了)。让我惊讶的是,尽管我知道 index_value 的数据是有效的,代码却一直走到了 "else:" 这个分支。我加了一些临时的调试代码:

print('Checking whether '+str(t.index_value)+"<"+str(len(work_list)))

x = t.index_value
y = len(work_list)

print(x)
print(y)
print(x<y)

if t.index_value < len(work_list):
    ... do stuff ...
else:
    ... print some error ...

以下是输出结果:

>> Checking whether 3<4
>> 3
>> 4
>> False

有没有人能帮我理解这是怎么回事?

进一步说明:

  • work_list 是在方法内部创建的局部变量
  • t 是一个类的实例,也是方法内部创建的(t = SomeClass()

更新:问题出在 t.index_value 的类型是 UNICODE,而不是 int。原因是我从一个文本文件中反序列化了 t 的内容,其中 index_value 的值是一个单数字符。在我从文本中提取出来后,直接把它赋值给 index_value,而没有用 int() 转换,这本来是我应该做的,这样就解决了问题。

我决定保留这个“有争议”的标题,尽管这显然是我的错误而不是 Python 的问题,因为有同样问题的人可能会通过这个标题找到答案。

2 个回答

2

为了显示那些可能和你预期的类型不一样的值(比如,像kcwu提到的,可能是字符串而不是数字),你可以使用 repr(x) 这样的方式。

8

根据我的经验,“t.index_value”的类型是什么呢?可能是一个字符串,比如“3”。

>>> print '3' < 4
False

撰写回答