我在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
答案 0 :(得分:0)
你发布的内容几乎无法判断。浮点数不会随机从0.0切换到~0.05,这会改变存储在该存储位置(变量)中的值。你是从其他线程设置值吗?
另外,请注意,在您的演示代码中,如果您正在寻找x.prob从一开始就具有0.0592的值,它将无法在if语句中进行相等性测试,并且永远不会触发您的print语句。< / p>