Python len()与len:TypeError:&x27;浮动';对象不能解释为整数

Python len()与len:TypeError:&x27;浮动';对象不能解释为整数,python,sum,typeerror,magic-methods,variable-length,Python,Sum,Typeerror,Magic Methods,Variable Length,我遇到了一个奇怪的错误,我不认为这是我的代码的问题 以下是我得到的物品: 边界:表示域和范围,例如[1,10],它具有低属性和高属性,在本例中为低=1和高=10 Lim:表示并集,这样[1,10]U[20,30],存储为self.bounders=[Boundary([1,10]),Boundary([20,30])] 这就是我想做的 我在边界中定义了\uuu len\uuu,这样len(边界([1,10]))\u35;=>9 类边界: 定义(自我): 回位abs(自高-自低) 在Lim对

我遇到了一个奇怪的错误,我不认为这是我的代码的问题

以下是我得到的物品:

  • 边界:表示域和范围,例如
    [1,10]
    ,它具有
    属性和
    属性,在本例中为
    低=1
    高=10
  • Lim:表示并集,这样
    [1,10]U[20,30]
    ,存储为
    self.bounders=[Boundary([1,10]),Boundary([20,30])]
这就是我想做的

  • 我在边界中定义了
    \uuu len\uuu
    ,这样
    len(边界([1,10]))\u35;=>9
  • 类边界:
    定义(自我):
    回位abs(自高-自低)
    
  • 在Lim对象中,我有
    self.bounders
    ,这是一个边界对象列表。定义了边界中的
    \uuuuu len\uuuu
    后,我将Lim的
    \uuuuuuu len\uuuu
    编码如下:
  • Lim类:
    定义(自我):
    返回和([len(bd)表示自边界中的bd])
    
    以下是问题发生的方式,包括以下内容:

    类边界:
    定义(自我):
    回位abs(自高-自低)
    Lim类:
    定义(自我):
    返回和([len(bd)表示自边界中的bd])
    打印(len(Lim([1,10],[20,30]))
    #回溯(最近一次呼叫最后一次):
    #文件“boundary.py”位于
    #打印(len(Lim([1,10],[20,30]))
    #文件“boundary.py”,在__
    #返回和([len(bd)表示自边界中的bd])
    #文件“boundary.py”,位于
    #返回和([len(bd)表示自边界中的bd])
    #TypeError:“float”对象不能解释为整数
    
    但在这个组合中:

    类边界:
    定义(自我):
    回位abs(自高-自低)
    Lim类:
    定义(自我):
    返回和([bd.\uuuuu len\uuuuuu()用于自边界中的bd])
    打印(len(Lim([1,10],[20,30]))
    #回溯(最近一次呼叫最后一次):
    #文件“boundary.py”,位于
    #打印(len(Lim([1,10],[20,30]))
    #TypeError:“float”对象不能解释为整数
    
    但是,代码最终以这种组合执行:

    类边界:
    定义(自我):
    回位abs(自高-自低)
    Lim类:
    定义(自我):
    返回和([bd.\uuuuu len\uuuuuu()用于自边界中的bd])
    打印(Lim([1,10],[20,30])。\uuuu len\uuuu()
    # 19
    

    为什么将
    len()
    更改为
    \u len\u()
    会消除错误?如果您能提供一些帮助,我将非常高兴。

    正如评论中指出的,
    len
    与您的用例不兼容。我不知道您的解决方案需要多大的灵活性,但我提出了一个最低限度的工作示例:

    from typing import List
    
    def dist(boundary: object, m='euclidean') -> float:
        """Computes a given distance for object-typed boundaries.
        """
        return boundary.__dist__(m)
    
    def converge(lim: object) -> float:
        """_Integrates_ the distances over boundaries."""
        return lim.__converge__()
    
    
    class Boundary(object):
        low = 0
        high = 0
        
        def __init__(self, lo: float, hi: float):
            self.low = lo
            self.high = hi
            
        def __dist__(self, m: str) -> float:
            if m == 'euclidean':
                return abs(self.high - self.low)
            else:
                raise Error(f'Unknown distance {m}')
    
    class Lim(object):
        boundaries = []
        def __init__(self, boundaries: List[Boundary]):
            self.boundaries = boundaries
    
        def __converge__(self) -> float:
            return sum([dist(bd) for bd in self.boundaries])
    
    print(converge(Lim([Boundary(1.0, 10.0), Boundary(20.0, 30.0)])))
    # expect abs(10-1) + abs(30-20) = 9+10 = 19
    

    (据我所知)那正是你想要的。此外,您还可以引入基于
    边界
    类的不同
    边界
    类。对于基本
    Boundary
    类,可以引入不同的距离度量,对于
    Lim
    类(作为基类),可以创建不同的收敛方案。虽然这个答案没有说明你最初的问题(都在评论中),但这是否为你勾勒出了前进的方向?

    这个问题已经在这里得到了回答:@tahesse抱歉,我以前在一些相关帖子中读到过,但没有公平地解决我的问题。您介意与我们分享您的
    Lim
    Boundary
    构造函数吗?我将为您起草一个演示。发布的代码不会给出发布的输出。即使填写合理的
    \uuuu init\uuuu
    方法,也不会给出发布的输出。tahesse很可能对潜在错误的原因是正确的,但问题中的代码不会重现错误。
    \uuuuu len\uuuu
    旨在检索序列和其他集合的大小,这些集合具有离散的整数大小,通常受内存限制。尽管名称不同,但它不适用于线段和曲线的长度、间隔的大小或其他返回值必须为非整数的用例。