Python - 更好的循环解决方案 - 出现错误后重新运行并在 3 次尝试后忽略该错误

Posted

技术标签:

【中文标题】Python - 更好的循环解决方案 - 出现错误后重新运行并在 3 次尝试后忽略该错误【英文标题】:Python - better solution for loops - Re-run after getting a error & ignore that error after 3 attempts 【发布时间】:2017-10-22 08:40:44 【问题描述】:

我在下面创建了 for 循环来运行一个函数来从 pandas 获取价格数据以获取代码列表。基本上,如果收到 RemoteDataError 并在 3 次尝试后忽略该错误,循环将重新运行该函数。

尽管下面的 for 循环为此目的工作正常,但我确实认为有更好的解决方案,因为我无法从下面的循环中定义尝试次数,例如在 for 循环之外放置一个 while 循环来表示尝试次数。我试图定义一个名为尝试= 0的变量,每次重新运行时,都会添加一次尝试。逻辑是尝试次数 += 1。如果尝试次数达到 3,请使用 continue 忽略错误。但是,它没有用。可能是我设置错误了。

 for ticker in tickers:
        print(ticker)
        try:
            get_price_for_ticker()
        except RemoteDataError:
            print('No information for '.format(ticker))
            try:
                get_price_for_ticker()
                print('Got data')
            except RemoteDataError:
                print('1st with no data')
                try:
                    get_price_for_ticker()
                    print('Got data')
                except RemoteDataError:
                    print('2nd with no data')
                    try:
                        get_price_for_ticker()
                        print('Got data')
                    except RemoteDataError:
                        print('3rd with no data (should have no data in the database)')
                        continue

有没有更好的方法来达到这个目的?

【问题讨论】:

你需要在你使用attempts变量的地方显示代码,然后我们才能更好地理解你可能遇到的代码问题,当然合并attempts的方法更好替代您在此处提供的代码,如果不是最好的。 【参考方案1】:

有没有更好的方法来达到这个目的?

是的,有。使用while 循环和计数器。

count = 0
while count < 3:
    try:
        get_price_for_ticker()
        break                    # reach on success
    except RemoteDataError:
        print('Retrying '.format(count + 1)) 
        count += 1               # increment number of failed attempts

if count == 3:
    ...                          # if count equals 3, the read was not successful 

此代码应进入您的外部 for 循环。或者,您可以使用接受ticker 参数的while + 错误处理代码定义一个函数,并且您可以在for 循环的每次迭代中调用that 函数。这是风格问题,由您决定。

【讨论】:

感谢您的回复。我应该把这个while循环放在上面的for循环中吗? @MKYJ 是的,你应该。或者,您可以将此循环放在一个接受ticker 参数的函数中,然后在for 循环中调用该函数。无论哪种方式都应该有效。 @MKYJ 另外,如果有帮助,请不要忘记投票并接受答案(按灰色复选标记并将其切换为绿色)。

以上是关于Python - 更好的循环解决方案 - 出现错误后重新运行并在 3 次尝试后忽略该错误的主要内容,如果未能解决你的问题,请参考以下文章

Python:循环内的子图:第一个面板出现在错误的位置

python3错误之TypeError: 'dict_items' object is not callable

ipython在最新python版本中出现事件循环问题

使用 Python3 gstreamer1.0 和 pylonsrc 使用 basler 相机和 pylon5 在处理循环中出现错误

Javascript:当幂等于 0 时,用于解决指数问题的 While 循环出现错误

Python“for”循环的更好方法