【问题标题】:'>=' not supported between instances of 'NoneType' and 'float''NoneType' 和 'float' 的实例之间不支持 '>='
【发布时间】:2020-02-12 03:30:45
【问题描述】:

我想运行我的代码,但是,我不断收到错误消息。 这是关于他们在其中输入值的表单字段。如果该值在特定范围内,他们将获得 1 欧元。代码是:

class Guess(Page):
    form_model = 'player'
    form_fields = ['guess']

    def is_displayed(self):
        return self.round_number == 2

    def vars_for_template(self):
        if self.player.guess >= 11.25 and self.player.guess <= 13.75:
            self.player.cumulative_guthaben = self.player.cumulative_guthaben + 1
        else:
            self.player.cumulative_guthaben = self.player.cumulative_guthaben

            return {
                'current_credit': self.player.cumulative_guthaben,
                'anzahlspieler': Constants.number_of_players,
                'round_number': self.round_number,}

我知道这是一个类型错误,但我没有成功修复它

Here is a shorter Version of my Class: 
class Player(BasePlayer): 
guthaben = models.CurrencyField(initial=c(0)) 
cumulative_guthaben = models.CurrencyField() 
donation = models.FloatField(min=c(0)) 
earnedmoney = models.CurrencyField() 
frequency = models.StringField() 
rival = models.StringField() 
guess = models.FloatField(label="Your Guess:")

【问题讨论】:

  • 什么是player.guess
  • 1) 请粘贴完整的错误回溯。调试时#1 有用的是完整的回溯,而不是它的最后一行(它准确地告诉你一行导致了问题)。 2)从外观上看,导致问题的代码不在您粘贴的块中(它在播放器类中)。
  • 在您解决了上一个问题的 cmets(或关闭它)之前,请不要打开新问题。
  • self.player.guessNone。要找出原因,您必须发布更多相关代码。
  • 这是我的课程的一个较短的版本: class Player(BasePlayer):guthaben = models.CurrencyField(initial=c(0))cumulative_guthaben = models.CurrencyField()donation = models.FloatField(min =c(0)) 挣钱 = models.CurrencyField() 频率 = models.StringField() 竞争对手 = models.StringField() 猜测 = models.FloatField(label="Your Guess:")

标签: python django error-handling django-templates form-fields


【解决方案1】:

您会收到错误,因为在某些时候 self.player.guess 是 NoneType 并且它应该是 float 以将其与 float 进行比较。您可以使用isinstance(i, type)。您不需要其他,因为您不会更改 self.player.cumulative_guthaben 的值。 但是您应该检查其余代码,为什么 self.player.guess 是 NoneType。 类似的东西:

class Guess(Page):
    form_model = 'player'
    form_fields = ['guess']
    def is_displayed(self):
        return self.round_number == 2

    def vars_for_template(self):
        if isinstance(self.player.guess, float):
            if (self.player.guess >= 11.25 and self.player.guess <= 13.75):
                self.player.cumulative_guthaben = self.player.cumulative_guthaben + 1
        return {
            'current_credit': self.player.cumulative_guthaben,
            'anzahlspieler': Constants.number_of_players,
            'round_number': self.round_number,}

【讨论】:

  • 首先非常感谢您的帮助,这不是我的代码,我是初学者。奇怪的是,我只在这一小节中定义了变量guess,并不会在另一节中使用它。我唯一一次看到它是在 models.py 中作为“guess = models.FloatField(label="Your Guess:")”
猜你喜欢
  • 2020-05-05
  • 2021-03-18
  • 1970-01-01
  • 2021-05-20
  • 1970-01-01
  • 2020-07-28
  • 2017-09-22
  • 2018-03-06
  • 1970-01-01
相关资源
最近更新 更多