数字比较 - Python Bug?

Roe*_*ler 1 python numbers

在我的代码内部深处,如果嵌套在一个类方法内部嵌套,我将某个索引值与某个列表的长度进行比较,以验证我可以访问该索引.代码看起来像这样:

if t.index_value < len(work_list):
    ... do stuff ...
else:
    ... print some error ...
Run Code Online (Sandbox Code Playgroud)

为了澄清,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 ...
Run Code Online (Sandbox Code Playgroud)

以下是输出:

>> Checking whether 3<4
>> 3
>> 4
>> False
Run Code Online (Sandbox Code Playgroud)

谁能帮我理解这里发生了什么?

进一步澄清:

  • work_list是在方法中实例化的局部变量
  • t是一个类实例,在method(t = SomeClass())中实例化

更新:问题是t.index_valueUNICODE 的类型而不是int.原因是我从文本文件中反序列化了t的内容,其中index_value的值由单个数字字符表示.在我从文本中提取它之后,我立即将它分配给它index_value,而不是通过int()传递它,我应该做什么,这解决了问题.

我决定保留"有争议的"头衔,尽管它显然是我的错误,而不是Python的,因为有相同问题的人可能会发现它使用这个标题.

kcw*_*cwu 8

根据我的经验,"t.index_value"的类型是什么?也许它是一个字符串"3".

>>> print '3' < 4
False
Run Code Online (Sandbox Code Playgroud)