ZeroDivisionError: деление с плавающей точкой на ноль - PullRequest
0 голосов
/ 25 апреля 2020

Я не знаю, что происходит, это работало раньше. Это никогда не случалось со мной. кто-то помогите, я потерян.

строка ошибки:

        result = p0 + (EMA - d0) / (d1 - d0) * (p1 - p0) if p0 != 100.0 or p1 != 100.0 else 100.0

я пробую это:

        if p0 != 100.0 or p1 != 100.0:
            result = p0 + (EMA - d0) / (d1 - d0) * (p1 - p0)
        else:
            result = 100.0

код:

    def requestCurData(self, damageRating, movingAvgDamage):
        self.values = config.values[self.check_player_thread()][self.name]
        if len(self.values) == 4:
            tm = datetime.datetime.toordinal(datetime.datetime.utcnow()) - 1
            self.values.extend([tm, tm])
            config.values[self.check_player_thread()][self.name] = self.values
        if movingAvgDamage not in self.values or datetime.datetime.toordinal(datetime.datetime.utcnow()) >= self.values[5] + 1:
            p0 = self.values[2]
            d0 = self.values[3]
            t0 = self.values[5]
            p1 = damageRating
            d1 = movingAvgDamage
            t1 = datetime.datetime.toordinal(datetime.datetime.utcnow())
            self.values = [p0, d0, p1, d1, t0, t1]
            config.values[self.check_player_thread()][self.name] = self.values
        if self.values[0] == self.values[2] and self.values[1] == self.values[3]:
            self.values[3] += 10
            self.values[5] = datetime.datetime.toordinal(datetime.datetime.utcnow())
            config.values[self.check_player_thread()][self.name] = self.values
        EDn = self.battleDamage + max(self.RADIO_ASSIST, self.TRACK_ASSIST, self.STUN_ASSIST)
        k = 0.0198019801980198022206547392443098942749202251434326171875  # 2 / (100.0 + 1)
        EMA = k * EDn + (1 - k) * self.movingAvgDamage
        p0, d0, p1, d1, t0, t1 = self.values
        result = p0 + (EMA - d0) / (d1 - d0) * (p1 - p0) if p0 != 100.0 or p1 != 100.0 else 100.0
        nextMark = round(min(100.0, result), 2) if result > 0 else 0.0
        self.initiated = self.values[1] and not nextMark >= self.damageRating and not self.damageRating - nextMark > 3

1 Ответ

0 голосов
/ 25 апреля 2020

Сообщение об ошибке не ясно, но я полагаю, вы пытаетесь разделить число с плавающей точкой на целое число, а Python это не нравится. Попробуйте:

result = p0 + (EMA - d0) / float( (d1 - d0) * (p1 - p0) ) if p0 != 100.0 or p1 != 100.0 else 100.0

Если это не сработало, возможно, вы пытаетесь разделить на ноль, что невозможно, поэтому оберните вычисления в блок try-catch:

try:
   result = p0 + (EMA - d0) / (d1 - d0) * (p1 - p0) if p0 != 100.0 or p1 != 100.0 else 100.0
except ZeroDivisionError:
    result = "some default value"
...