コードの奥深く、ネストされた 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
int ではなく UNICODE であったことです。その理由は、index_value の値が 1 桁の文字で表されるテキスト ファイルから t の内容を逆シリアル化したためです。index_value
テキストから抽出した後、 int() を介して渡すことなく、すぐにに割り当てました。これにより、問題が解決しました。
同じ問題を抱えている人がこのタイトルを使用して見つける可能性があるため、これは明らかに私のバグであり、Python のバグではないという事実にもかかわらず、「物議を醸す」タイトルを維持することにしました。