2009-05-15 17 views
1

深い私のコードの中で入れ子になっている場合は、内部のクラスメソッドのために、特定のインデックス値を特定のリストの長さと比較して、そのインデックスにアクセスできることを検証します。 index_valueは(どこか検証)少なくともゼロで、明確にするため数値の比較 - Pythonのバグ?

if t.index_value < len(work_list): 
    ... do stuff ... 
else: 
    ... print some error ... 

:コードは、そのようなものになります。私の驚いたことに、index_valueデータが有効であることは分かっていますが、コードは "else:"節に移動し続けます。

>> Checking whether 3<4 
>> 3 
>> 4 
>> False 

誰も私がここで何が起こっているか理解するのを助けることができる:出力が続き

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 ... 

:私はいくつかのアドホックデバッグコードを追加しましたか?

さらに明確化:

  • work_listローカル変数メソッド内でインスタンス化
  • tはメソッド内でインスタンス化され、クラスのインスタンスである(t = SomeClass()

更新:ザ・問題は、t.index_valueのタイプがintではなくUNICODEであることでした。その理由は、テキストファイルからtの内容を逆シリアル化したところです。この場合、index_valueの値は1桁の文字で表されます。テキストから抽出した後、即座にそれをindex_valueに割り当て、int()を渡さずに済んだら、問題を解決しました。

私は同じ問題を抱えている人々がこのタイトルを使って見つけることができるので、明らかに私のバグでありPythonのものではないにもかかわらず、「論争の的な」タイトルを維持することに決めました。

+0

最初のprint文の下に行を追加できますか?試してみてください(タイプ(t.index_value)) – Wesley

答えて

8

私の経験では、 "t.index_value"のタイプは何ですか?多分それは文字列 "3"です。

>>> print '3' < 4 
False 
+0

それは問題でした、ありがとう –

2

repr(x)などを使用し、(kcwuが示唆するように、例えば、文字列ではなく数)を使用すると、予想よりも異なるタイプであるかもしれない値を表示します。