Python变量在pdb和print语句中的计算方式不同
我在一个python程序中使用线程,最近发现了一个问题,浮点没有被正确解释,每当我在pdb或日志语句中打印它时,它大部分时间都会正确显示 奇怪的是,我刚才运行的两个线程中显示的打印量不同。另外,前两次打印使用相同的格式,但线程1中的值仍会更改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))
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