1

コードの奥深く、ネストされた 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_valueint ではなく UNICODE であったことです。その理由は、index_value の値が 1 桁の文字で表されるテキスト ファイルから t の内容を逆シリアル化したためです。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 に答える