首页 > 解决方案 > 在 Python 中清除调用堆栈

问题描述

我对 Python 还很陌生,并且停留在一个看似简单的问题上。经过几个月的等待,我想我会放弃并编写自己的机器人来让我的孩子们购买 PS5。但我遇到了堆栈深度问题。

该程序只是查看项目是否可用,如果不可用,则刷新页面并重试。但是我在 1000 次调用后抛出异常。我一直在寻找一种在 Python 中清除堆栈的方法,但没有找到任何东西。

我还尝试在堆栈 > 1000 时重新启动程序os. execv()。但这会引发 Exec 格式错误。

以下是删除了所有登录和设置内容的截断版本。预先感谢您的任何帮助!

def click_and_buy():
    try:
        print('trying to buy')
        buy_now = driver.find_element_by_xpath('//*[@id="buy-now-button"]')
        buy_now.click()
    except Exception as e:
        print(len(inspect.stack(0)))
        if len(inspect.stack(0)) < 5:
            click_and_buy()
            time.sleep(1)
        else:
            restart()


def restart():
    # os.system('ps5_bots.py')
    os.execv(__file__, sys.argv)


if __name__ == '__main__':
    click_and_buy()

标签: pythonrecursion

解决方案


递归不适合无限重复。这是一个xy 问题

而是通过使用 while 循环使方法迭代。或者用另一个会调用循环的方法包装该方法:

def click_and_buy():
    print('trying to buy')
    buy_now = driver.find_element_by_xpath('//*[@id="buy-now-button"]')
    buy_now.click()


def click_and_buy_repeated():
    while True:
        click_and_buy()


if __name__ == '__main__':
    click_and_buy_repeated()

推荐阅读