Python返回列表包含的错误答案

时间:2016-08-05 16:52:39

标签: python multithreading list if-statement

我有一个带有一些方法的类,以及一个在线程之间共享的dicts E的dict。我每次需要时使用Threading.lock()类(实例化为Elock)来从E读取和写入。

该类中的一种方法如下所示:

Elock.acquire()
#print self.Num, E[key].keys()
if self.Num not in E[key].keys():
    print '\n\nDisappeared!\n\n', self.Num, E[key].keys()
    #DO STUFF
    Elock.release()
    return
else:
    Elock.release()

我真正想到的是我会得到

Disappeared!

17171875.0 [17175000.0, 17171875.0]

当我在条件之前取消注释打印命令时,我得到了我期待的结果:

17171875.0 [17175000.0,17171875.0]

正如您所看到的,在self.Num E[key].keysTrue。为什么条件返回if并输入self.Num子句?

有时float将是E[key].keys(),而int中的相应元素将是if float(self.Num) not in [float(x) for x in E[key].keys()]: 。这不应该是一个问题,我认为不会导致我的问题。我写的时候

if int(self.Num) not in [int(x) for x in E[key].keys()]:

此外,一位意见提供者建议我不要使用花车。我试过这个:

Document -> pages -> paragraphs

但在这两种情况下,行为都不会改变。

最令人费解的是,它只会破坏一些!它大部分时间都能正常工作,但如果数字以5.0结尾,似乎会返回错误的答案(至少,这是我见过它的唯一时间)。

0 个答案:

没有答案