代码之家  ›  专栏  ›  技术社区  ›  Nithin K

即使类属性的类型正确,也会获取异常

  •  0
  • Nithin K  · 技术社区  · 2 年前

    我目前正在从事一个项目,该项目有以下课程

        import operator
    
        class dummy:
        def __init__(self,
                     density):
            self.density = density
        
        density = property(operator.attrgetter('_density'))
    
        @property
        def density(self):
            return self._density
        
        @density.setter
        def density(self,value):
            if type(value) != int or type(value) != float:
                raise Exception("density must be int or float types!")
            elif value <= 0:
                raise Exception("density must be non-zero and positive!")
            self._density = value
    

    每当我尝试这样运行此代码时,都会出现异常:

    dev = dummy(density = 3.25)

    这是我得到的错误:

    ----> 1 dev = dummy(density = 3.25)
    
    ~\AppData\Local\Temp/ipykernel_18292/2065730148.py in __init__(self, density)
          2     def __init__(self,
          3                  density):
    ----> 4         self.density = density
          5 
          6     density = property(operator.attrgetter('_density'))
    
    ~\AppData\Local\Temp/ipykernel_18292/2065730148.py in density(self, value)
         13     def density(self,value):
         14         if type(value) != int or type(value) != float:
    ---> 15             raise Exception("density must be int or float types!")
         16         elif value <= 0:
         17             raise Exception("density must be non-zero and positive!")
    
    Exception: density must be int or float types!
    

    我不知道我做错了什么。任何帮助都将不胜感激!

    1 回复  |  直到 2 年前
        1
  •  0
  •   Bill Morgan    2 年前

    如果是浮点,则键入(value)!=int将计算为true,您将引发异常。

    将逻辑更改为“and”,它将工作:

    if type(value) != int and type(value) != float: