【问题标题】:RecursionError: maximum recursion depth exceeded - tkinter timer projectRecursionError:超出最大递归深度 - tkinter 计时器项目
【发布时间】:2020-08-09 16:36:57
【问题描述】:

我是 Python 的初学者,对此并不熟悉。我正在做一个计时器项目,在这个项目中我会循环直到我的秒数达到 0,但我总是收到这个错误。

这是函数(使用 tkinter):

def sec():
    second -= 1

def eg_number():
    root.after(1000, sec)
    eg_number()
    if second == 0:
        return  #even with this, I still get the error

我也尝试设置我的递归限制,但它仍然无法正常工作。我只是得到一个堆栈溢出。

【问题讨论】:

  • 这是一次又一次调用 eg_number() 的无限循环
  • 如果sec 实际上是您提供的代码,那么它不会运行,因为它会立即出错。
  • 即使您设法将其更改为在second 达到零时退出,在时间限制到期之前调用无限递归仍然是不明智的。它没有任何作用,总是会导致堆栈溢出。您尝试做的事情没有意义。
  • 你有什么解决办法吗?请考虑以下来自用户 Or Y 的评论。感谢您的回答。
  • 解决方案是在时间限制到期之前不要尝试执行无限递归。由于您没有说明您希望实现的原因,因此很难提出替代方案。

标签: python python-3.x function tkinter


【解决方案1】:

第一个second 应在sec() 函数内声明为全局。你也应该将eg_number 传递给after()

second = 20

def sec():
    global second
    second -= 1
    print(second)

def eg_number():
    sec()
    if second == 0:
        return
    root.after(1000, eg_number)

【讨论】:

    【解决方案2】:

    您继续在 eg_number 内部调用 eg_number 并使用 now stop 条件。 在调用 eg_number 之前将 if second == 0 移至 eg_number

    def eg_number():
        root.after(1000, sec)
        if second == 0:
            return
        eg_number()
    

    【讨论】:

    • 还是一样的问题
    猜你喜欢
    • 2017-03-24
    • 2020-10-08
    • 2020-07-13
    • 2018-09-24
    • 1970-01-01
    • 2019-01-18
    • 1970-01-01
    • 1970-01-01
    • 2019-03-23
    相关资源
    最近更新 更多