Python random.expovariate() 零除法错误

Python random.expovariate() zero division error

当我在代码中使用 random.expovariate(1/6) 时,出现零除法错误。任何人都知道为什么?这是我的代码:

randomSeed = 1000
random.seed(randomSeed)    
def function1(env):
    for i in range(1000):
        time = random.expovariate(1/6)
        yield env.timeout(time)

这是错误:

File "..\simulation.py", line 108, in function1
    time = random.expovariate(1/6)
File "..\random.py", line 440, in expovariate
    return -_log(1.0 - self.random())/lambd
ZeroDivisionError: float division by zero

random.expovariate() 输入应为非零。我猜你是 运行 python2 而 1/6 是 0。将它更改为 1./6. 应该没问题。

如何调试

  • 您的错误消息的最后一行显示 ZeroDivisionError: float division by zero
  • 上面说这发生在 expovariate 的第 440 行,当时它试图评估 return -_log(1.0 - self.random())/lambd。唯一的划分是 lambd.
  • 如果您转到 documentation for expovariate,您会注意到 lambd 是该函数的参数,第一条错误消息告诉您您已将1/6。 Q.e.d。 1/6 必须为零。您可以进入交互式 Python 会话进行确认。
  • 到那时,回忆或查找整数除法的工作原理,以得出将 1/6 更改为使用浮点数的解决方案即可实现您想要的效果。

有些错误消息可能非常晦涩难懂,但它们可以解释为什么、在哪里以及如何以语言的最佳能力出现问题。阅读它们并跟踪链回是一项非常值得学习的技能。