定义方法中的“尝试,排除,最终”问题

时间:2018-12-01 21:01:13

标签: python python-3.x

我正在处理的代码段有问题。

def cmdPerm():
    try:
        Permission = ""

        if Permission == "":
            Permission = str(browser.find_element_by_xpath("/html/body/content/div/div[8]/div[2]/card[1]/content/div/p[1]/strong"))
        if Permission == "":
            Permission = str(browser.find_element_by_xpath("/html/body/content/div/div[8]/div[1]/card[1]/content/div/p"))
        if Permission == "":
            Permission = str(browser.find_element_by_xpath("/html/body/content/div/div[7]/div[2]/card[1]/content/div/p/strong"))
        if Permission == "":
            Permission = str(browser.find_element_by_xpath("/html/body/content/div/div[7]/div[2]/card[1]/content/div/p[1]/strong"))

        if Permission != "":
            fileAdd.write("\n" + Permission)
    except:
        unused = ""
    finally:
        unused = ""

问题在于此函数始终返回Exception。编译/运行时或类似的东西都没有错误,但是除了:无论我输入什么,总是会出错。我尝试将“权限”的值更改为“ ABC”。我知道这会阻止整个XPath发生,但是我代码中的最后一个IF语句应该可以工作。不,这不是我所需的任何其他导入,上面有更多代码遵循相同的模板,并且它们都可以工作。正是这个与我争论。

编辑:解释代码的全部内容,基本上是一个网络爬虫,它检查网站的某个部分以获取信息,如果在该部分上找不到任何内容,它将转到代码中提供的下一个Xpath,直到找到为止一。如果它无法在任何XPath中找到数据,它将除以下内容:并继续执行其余代码(这样做)。如果有任何XPath可以正常工作,它将不会检查其余XPath,而是将信息写入文件中。

亲切的问候,

2 个答案:

答案 0 :(得分:0)

工作代码如下。是XPath停止了它的工作,我知道每次运行此脚本时,至少有4个XPath中的3个将无法运行,这就是为什么我用这种方式进行设置。但是问题是,如果第一个不起作用,它将抛出异常,因此停止了代码。我是Python的新手,所以我还有很多东西要学习。下面的代码按预期工作。感谢您的所有帮助!

def cmdPerm():
    try:
        Permission = ""
        if Permission == "":
            Permission = browser.find_element_by_xpath("/html/body/content/div/div[8]/div[2]/card[1]/content/div/p[1]/strong")
    except:
        try:
            Permission = ""
            if Permission == "":
                Permission = browser.find_element_by_xpath("/html/body/content/div/div[8]/div[1]/card[1]/content/div/p")
        except:
            try:
                Permission = ""
                if Permission == "":
                    Permission = browser.find_element_by_xpath("/html/body/content/div/div[7]/div[2]/card[1]/content/div/p/strong")
            except:
                try:
                    Permission = ""
                    if Permission == "":
                        Permission = browser.find_element_by_xpath("/html/body/content/div/div[7]/div[2]/card[1]/content/div/p[1]/strong")
                except:
                    unused = ""
    finally:
        Permission = str(Permission.text)
        fileAdd.write("\n" + Permission)

答案 1 :(得分:0)

您可以将其简化为

def cmdPerm():
    paths = [
        "/html/body/content/div/div[8]/div[2]/card[1]/content/div/p[1]/strong",
        "/html/body/content/div/div[8]/div[1]/card[1]/content/div/p",
        "/html/body/content/div/div[7]/div[2]/card[1]/content/div/p/strong",
        "/html/body/content/div/div[7]/div[2]/card[1]/content/div/p[1]/strong"
    ]

    for p in paths:
        try:
            permission = browser.find_element_by_xpath(p)
            fileAdd.write("\n" + permission)
            break
        except NoSuchElementException:
            pass  # Ignore the error and try the next path
     else:
         # Put code here to execute if none of the paths worked
         pass

请注意已捕获的特定异常。您想忽略NoSuchElementException以继续循环,但是您不准备对任何其他异常做任何明智的事情,因此请不要抓住它们。