0

我在 python 程序中使用线程,最近发现了一个问题,即浮点数没有被正确解释,每当我在 pdb 或日志语句中打印它时,它大部分时间都正确显示。

奇怪的是,在我刚刚运行的这两个线程中显示的打印数量不同。前两次打印也使用相同的格式,但线程 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 语句中的相等性测试并且永远不会触发您的打印语句。

于 2011-04-13T04:59:44.173 回答