1

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

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 的错误,因为有同样问题的人可能会使用这个标题找到它。

4

2 回答 2

8

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

>>> print '3' < 4
False
于 2009-05-15T07:51:05.733 回答
2

要显示可能与您期望的类型不同的值(例如,字符串而不是数字,如 kcwu 建议repr(x)的那样),请使用等。

于 2009-05-15T08:07:11.543 回答