【问题标题】:Maximum recursion depth exceeded while comparing two objects比较两个对象时超出最大递归深度
【发布时间】:2014-02-04 02:36:48
【问题描述】:

我目前是 Python 新手,不知道为什么会出现错误:

a<r raised exception RuntimeError: maximum recursion depth exceeded while calling a Python object

当我这样做时:

a = Rational(1,3)
r = Rational(0,5)
print(a<r)

我当前的代码是:

class Rational:
    def _gcd(x,y):
        while y != 0:
            x, y = y, x % y
        return x

    def __init__(self, num = 0, denom = 1):
         gcd = Rational._gcd(num, denom)
         self.num = int(num / gcd)
         self.denom = int(denom / gcd)

    def __lt__(self, right):
        return Rational(self.num, self.denom) < Rational(right.num, right.denom)

当我做同样的事情时,所有其他关系运算符也会发生这种情况。 有人可以在这个特定问题上启发我吗?我该如何处理或解决此问题?

谢谢!

【问题讨论】:

  • 因为您应该比较比率。顺便说一句,请查看fractions.Fraction class

标签: python class recursion operator-keyword


【解决方案1】:

这一行:

Rational(self.num, self.denom) < Rational(right.num, right.denom)

… 再次调用__lt__ 方法,导致无限递归。尝试不同的方法,假设我们使用的是 Python 3.x(或在 Python 2.x 中,from __future__ import division 是预先执行的),这应该可以工作:

self.num/self.denom < right.num/right.denom

【讨论】:

  • 哦,我明白了!谢谢!哈哈!非常感谢!
  • 他正在使用 Python 3。否则 Rational._gcd 的事情将无法正常工作
猜你喜欢
  • 2017-11-05
  • 2013-11-30
  • 1970-01-01
  • 2019-03-23
  • 2016-05-23
  • 2019-04-18
  • 2021-02-13
  • 1970-01-01
  • 2022-08-07
相关资源
最近更新 更多