Skip to main content
 首页 » 编程设计

python之数字比较之Python Bug

2025年05月04日11sxdcgaq8080

在我的代码深处,在类方法中的嵌套 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 的错误,因为有同样问题的人可能会使用这个标题找到它。

请您参考如下方法:

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

>>> print '3' < 4 
False