数字比较 - Python错误?
在我的代码深处,有一个嵌套的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