深入我的代码,嵌套在一个嵌套的内部类方法中,我将某个索引值与某个列表的长度进行比较,以验证我可以访问该索引。代码看起来像这样:
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
有谁能帮我理解这里发生了什么?
进一步澄清:
t = SomeClass()
)更新:问题是t.index_value
的类型是UNICODE而不是int。原因是我从文本文件中反序列化了t的内容,其中index_value的值由单个数字字符表示。在我从文本中提取它之后,我立即将它分配给index_value
,而没有通过int()传递给我应该做的事情,这解决了问题。
我决定保留“有争议的”头衔,尽管它显然是我的错误,而不是Python的,因为有相同问题的人可能会发现它使用这个标题。
答案 0 :(得分:8)
根据我的经验,“t.index_value”的类型是什么?也许它是一个字符串“3”。
>>> print '3' < 4
False
答案 1 :(得分:2)
要显示可能与您预期的类型不同的值(例如字符串而不是数字,如kcwu建议的那样),请使用repr(x)
等。