Python变量在pdb和print语句中的评估方式不同

时间:2011-04-13 04:48:00

标签: 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))
        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

1 个答案:

答案 0 :(得分:0)

你发布的内容几乎无法判断。浮点数不会随机从0.0切换到~0.05,这会改变存储在该存储位置(变量)中的值。你是从其他线程设置值吗?

另外,请注意,在您的演示代码中,如果您正在寻找x.prob从一开始就具有0.0592的值,它将无法在if语句中进行相等性测试,并且永远不会触发您的print语句。< / p>