Возвращается 0, если resullt равно None, чтобы избежать 'NoneType' и 'decimal.Decimal' - PullRequest
0 голосов
/ 02 августа 2020

Я пытаюсь добавить return 0 в случае, если конечным результатом уравнения будет None, от которого можно уйти: TypeError: unsupported operand type(s) for *: 'NoneType' and 'decimal.Decimal', но у меня это не работает.

Причина в том, что нет . количества проданных товаров может быть равно нулю, поэтому возвращается ошибка типа.

Вот функция:

    def designer_total_discount_price(self):
        total_sold_discount = self.count_sold * self.discount_price
        return 0 if total_sold_discount is None else total_sold_discount

    def designer_total_price(self):
        total_sold_regular = self.count_sold * self.price
        return 0 if total_sold_regular is None else total_sold_regular

    def designer_total(self):
        if self.discount_price:
            return self.designer_total_discount_price()
        return self.designer_total_price()

    def get_designer_final(self):
        return self.designer_total() * self.designer_profit

1 Ответ

1 голос
/ 02 августа 2020

Проблема может быть в том, что self.count_sold это None. Вы не можете умножить число на None. Помимо проверки, что self.count_sold всегда равно None, вы можете добавить этот метод:

    def get_count_sold(self):
        return 0 if self.count_sold is None else self.count_sold

И затем вы замените self.count_sold на self.get_count_sold(). Вы также можете удалить оператор if в операторе возврата. Примерно так:

    def designer_total_discount_price(self):
        return self.get_count_sold() * self.discount_price

    def designer_total_price(self):
        return self.get_count_sold() * self.price

Это мой первый ответ на Stack Overflow. Надеюсь, это помогло! :)

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