'float'对象不能被解释为数字减法的整数

问题描述 投票:0回答:0

我做了下面的课程。到目前为止,我的袖子里什么都没有:我可以看到属性

lower_value
upper_value
,以及
print
带有 dunder
__repr__
.

的对象
from functools import reduce

class UnidimensionalSet(object):
    pass

def checkIntervalAttrs(lower_value, upper_value, \
                 lower_is_closed, upper_is_closed):
    is_number=(isinstance(lower_value, float) or \
                   isinstance(lower_value, int)) and \
                  (isinstance(upper_value, float) or \
                   isinstance(upper_value, int))
        
    is_not_number_msg='Lower and upper values must have type float or int!'
    is_not_bool_msg='Lower and upper interval values closedness must have type bool!'
    
    is_closed_is_bool=isinstance(lower_is_closed, bool) and \
                      isinstance(upper_is_closed, bool)

    lower_lesser_than_upper = lower_value < upper_value
    lower_upper_msg='Lower value must be lesser than upper values'
    
    if(not is_number):
        raise TypeError(is_not_number_msg)

    if(not is_closed_is_bool):
        raise TypeError(is_not_bool_msg)

    if(not lower_lesser_than_upper):
        raise Exception(lower_upper_msg)

class Interval(UnidimensionalSet):
    def __init__(self, lower_value, upper_value, \
                 lower_is_closed=True, upper_is_closed=True):
        checkIntervalAttrs(lower_value, upper_value, \
                 lower_is_closed, upper_is_closed)
        
        self.lower_value = lower_value
        self.upper_value = upper_value

        self.lower_is_closed = lower_is_closed
        self.upper_is_closed = upper_is_closed
    
    def __repr__(self):    
        a = self.lower_value
        b = self.upper_value
        lbracket = '[' if self.lower_is_closed else '('
        rbracket = ']' if self.upper_is_closed else ')'
        
        return '{lbracket}{a}, {b}{rbracket}'.format(a=a, b=b, lbracket=lbracket, rbracket=rbracket)

    def __len__(self):
        return self.upper_value-self.lower_value 

但是,通过尝试长度操作

len(Interval(2.4,4.2))
,我收到以下错误。我能看懂,但看不懂,你能吗?

TypeError: 'float' object cannot be interpreted as an integer
python oop
© www.soinside.com 2019 - 2024. All rights reserved.