Python random.expovariate () ошибка нулевого деления - PullRequest
0 голосов
/ 08 мая 2020

Когда я использую 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

Ответы [ 2 ]

2 голосов
/ 08 мая 2020

random.expovariate() ввод не должен быть нулевым. Я предполагаю, что вы используете python2, а 1/6 равно 0. Измените его на 1./6., и все будет хорошо.

1 голос
/ 08 мая 2020

Как отлаживать

  • В последней строке вашего сообщения об ошибке написано ZeroDivisionError: float division by zero.
  • Выше говорится, что это произошло в строке 440 из expovariate, когда он пытался оценить return -_log(1.0 - self.random())/lambd. Единственное деление на lambd.
  • Если вы go перейдете к документации для expovariate, вы заметите, что lambd является аргументом функции, где первое сообщение об ошибке сообщает, что вы положили 1/6. Qed 1/6 должен быть равен нулю. Вы можете войти в интерактивный сеанс Python для подтверждения.
  • В этот момент вспомните или посмотрите, как работает целочисленное деление, чтобы прийти к решению, при котором изменение 1/6 на использование чисел с плавающей запятой будет делать то, что вы хотите.

Некоторые сообщения об ошибках могут быть довольно загадочными, но они объясняют, почему, где и как что-то не удалось в меру возможностей языков. Читать их и следовать по цепочке - это навык, который стоит изучить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...