0

Python プログラムでスレッドを使用していますが、最近、float が正しく解釈されず、pdb またはログ ステートメントで出力しようとすると、ほとんどの場合正しく表示されるという問題が見つかりました。

奇妙なことに、先ほど実行した 2 つのスレッドに表示されるには、異なる量のプリントが必要です。また、最初の 2 つの出力は同じ形式を使用しますが、値はスレッド 1 で変更されます。

for x in imports:
    if float(x.prob) == 0.0:
        logging.debug(float(x.prob))
        logging.debug(float(x.prob))
        logging.debug(x.prob)
        logging.debug(str(x.prob))
        logging.debug(str(float(x.prob)))
        import pdb; pdb.set_trace()

[DEBUG] (Thread-1  ) 0.0
[DEBUG] (Thread-1  ) 0.0592
[DEBUG] (Thread-1  ) 0.0592
[DEBUG] (Thread-1  ) 0.0592
[DEBUG] (Thread-1  ) 0.0592
[DEBUG] (Thread-2  ) 0.0
[DEBUG] (Thread-2  ) 0.0
[DEBUG] (Thread-2  ) 0
[DEBUG] (Thread-2  ) 0.0592
[DEBUG] (Thread-2  ) 0.0592

(Pdb) float(x.prob) == 0.0
False

原因は何ですか?初めて正しく解釈されるようにするにはどうすればよいですか?

この質問に似ています: https://stackoverflow.com/questions/2485338/pdb-show-different-variable-values-than-print-statements

4

1 に答える 1

0

あなたが投稿したものから判断するのはかなり不可能です。浮動小数点数は 0.0 から ~0.05 にランダムに切り替わらず、そのメモリ位置 (変数) に格納されている値が変更されています。他のスレッドから値を設定していますか?

また、デモ コードで x.prob の値が最初から 0.0592 になるように探している場合、if ステートメントの等価性テストに失敗し、print ステートメントがトリガーされないことに注意してください。

于 2011-04-13T04:59:44.173 に答える