python - 重试python中脚本/程序停止的地方,记住变量值

标签 python python-2.7 error-handling

我希望我的脚本在发生错误时从中断的地方重试。我正在使用 selenium 下载多个报告。有时,报告将无法正确加载。我希望脚本在出错时记住它的位置并重新尝试提取报告。 (我需要脚本记住 x 的值)。

这是一些可能有帮助的代码......(我迫切需要帮助)

import time
import os
import glob
from selenium.webdriver.common.action_chains import ActionChains
from selenium.common.exceptions import MoveTargetOutOfBoundsException
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import NoAlertPresentException

for x in range(1, 51):      
    while True:    
        try:
            fp = webdriver.FirefoxProfile('C:/Users//Documents/FirefoxProfile')
            browser = webdriver.Firefox(fp)
            browser.get('https://reportlocation/')

            time.sleep(8)

            browser.find_element_by_id("ctl00_PlaceHolderMain_login_UserName").clear()
            browser.find_element_by_id("ctl00_PlaceHolderMain_login_UserName").send_keys("ytb971")
            browser.find_element_by_id("ctl00_PlaceHolderMain_login_password").clear()
            browser.find_element_by_id("ctl00_PlaceHolderMain_login_password").send_keys("Fender25")
            browser.find_element_by_id("ctl00_PlaceHolderMain_login_login").click()

#gets user to reporting front end

            ReportMgr= browser.find_element_by_partial_link_text('Report Manager')
            ReportMgr.click()

            time.sleep(5)

            CustomReport= browser.find_element_by_partial_link_text('Custom Report')
            CustomReport.click()

            time.sleep(5)

            ProgramManagement= browser.find_element_by_partial_link_text('Program Management')
            ProgramManagement.click()
            ProgramManagement= browser.find_element_by_partial_link_text('Program Management').send_keys(Keys.ARROW_LEFT)

#pulls reports

            browser.find_element_by_partial_link_text('Program Management').click()
            time.sleep(10)
            browser.find_element_by_partial_link_text('Program Management').send_keys(Keys.ARROW_DOWN * x, Keys.ENTER, Keys.ENTER)
            time.sleep(30)
            browser.find_element_by_css_selector("#ctl00_PlaceHolderMain_ReportViewer1_HtmlOutputReportResults2_CSVButton_ImageAnchor > img").click()
            time.sleep(10)
            browser.find_element_by_partial_link_text('Program Management').click()
            time.sleep(10)
            browser.quit()

            except:
                continue
            else:
                break

最佳答案

您在这里所做的是迭代超过 50 个 x 的值。 ,并且一旦一次访问失败,您就会再次递归地开始迭代所有 50 个值。重复逻辑应该如下所示:

for x in range(1, 51):
    while True:  # or some condition to put a bound on retries
        try:
            ...
        except:
            continue
        else:
            break
therest()

这样,您仍然可以在 50 个值的循环内捕获每个异常,并在正在运行的迭代中执行重试,因此请记住 x 的当前值成为一个非问题。注意 else 的使用与 try声明:else如果没有发生异常,则执行子句;这是您想要停止重试当前值 x 的时候。 .

关于python - 重试python中脚本/程序停止的地方,记住变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35879625/

相关文章:

python - 如何处理CreateView中的对象引用

Python 模块名称错误

python - 使用元组作为函数的输入

javascript - AJAX 和 JSON 错误处理

java - 从控制台接受数据并将其存储在字符串中不同数据类型的变量中

python - 使用 pandas 和 python 读取重复的数据 block

Python Ctypes 将 void 指针转换为 nonetype 和 long。有什么影响?这是什么意思?

python - flask 的双向 ssl 身份验证

python - 如何按长度对单词列表进行排序

mobile - 尝试从移动应用登录时出现openid一般授权错误