Python变量在pdb和print语句中的计算方式不同

Python变量在pdb和print语句中的计算方式不同,python,debugging,pdb,Python,Debugging,Pdb,我在一个python程序中使用线程,最近发现了一个问题,浮点没有被正确解释,每当我在pdb或日志语句中打印它时,它大部分时间都会正确显示 奇怪的是,我刚才运行的两个线程中显示的打印量不同。另外,前两次打印使用相同的格式,但线程1中的值仍会更改 for x in imports: if float(x.prob) == 0.0: logging.debug(float(x.prob)) logging.debug(float(x.prob))

我在一个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

原因是什么? 我该怎么做才能第一次正确解释


类似于这个问题:

从你发布的内容很难判断。浮动不会随机从0.0切换到~0.05,内存位置变量中存储的值正在发生变化。您正在设置其他线程的值吗


另外,请注意,在演示代码中,如果您从一开始就希望x.prob的值为0.0592,那么它将无法通过if语句中的相等测试,并且不会触发打印语句。

我不是故意更改另一个线程中的值,我也从不希望它等于0,它应该始终具有正值,并且永远不会触发打印语句。我会检查这个值是否会改变。是的,主线程一定在改变这个值,这一点现在已经很明显了。需要一个完整的、可运行的程序来演示这个问题,在没有完整图片的情况下调试线程异常太难了。我们甚至不知道“进口”是什么,也不知道它来自哪里。
(Pdb) float(x.prob) == 0.0
False